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.

War es hilfreich?

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.

  1. Richten Sie Ihre Objekte in den Zustand, den Sie wollen, dass sie spec
  2. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top