How do you spec „read-only“ Verhalten eines Modells?
-
22-08-2019 - |
Frage
Zum Beispiel, sagen wir mal ich ein Question
Modell, dass die Boolesche Felder answered
und closed
hat. Wie würde ich das Verhalten testen, die eine Frage should be read only when marked as answered
RSpec mit? Dies scheint, wie es das Verhalten des Modells ist, aber ich bin nicht sicher, wie sie am besten testen. Soll ich für dieses Verhalten ein, bevor die Filter verwenden, und das Hinzufügen einer Fehlermeldung, dass Sie eine Frage beantwortete nicht ändern können? Oder gibt es einen besseren Weg, es zu tun? Ich bin nur RSpec und BDD lernen.
Lösung
abhängt, wie Sie brauchen, es funktioniert, aber ...
describe Question do
it "should be read only when marked as answered" do
question = Question.new(:title => 'old title')
question.answered = true
question.save
# this
lambda {
question.title = 'new title'
}.should raise_error(ReadOnlyError)
# or
question.title = 'new title'
question.save
question.title.should == 'old title'
# or
quesiton.title = 'new title'
question.save.should be_false
end
end
Oder vielleicht wollen Sie die Fehler beim Speichern erhöht werden? Oder vielleicht gibt es keinen Fehler und es einfach nicht still den Wert nicht ändern? Es liegt an Ihnen, wie Sie es umsetzen wollen, aber die Methodik ist die gleiche.
- Richten Sie Ihre Objekte in den Zustand, den Sie wollen, dass sie spec
- Stellen Sie sicher, dass Ihre Objekte in diesem Zustand zu tun, was man erwartet
So Setup eine Frage beantwortet, und dann sehen, ob Sie eine seine Daten ändern können. Wenn Sie nicht können, dann übergeben spec. Es liegt an Ihnen, wie Sie das Verhalten Ihres Modells arbeiten wollen. Und die große Sache über BDD ist, dass Sie über diese Schnittstelle zuerst denken, da Sie haben tatsächlich ein Objekte API verwenden, um es zu spec.