13 Stimmen

RSpec: Mehrfache Erwartung einer Nachricht mit unterschiedlichen Parametern

Ich habe derzeit einige Erwartungen an ein Modell mit aufeinanderfolgenden Anrufen aufgestellt:

Die Spezifikation:

@my_mock = mock("a_mock")
@options1 = {:some => "option"}
@options2 = {:some_other => "option"}
@first_param = mock("first_param")

@my_mock.should_receive(:a_message).with(@first_param, @options1)
@my_mock.should_receive(:a_message).with(@first_param, @options2)

Ich erhalte jedoch folgende Meldung:

Mock "a_mock" received :a_message with unexpected arguments
  expected: (#<Spec::Mocks::Mock:0x81b8ca3c @name="first_param"{:some => "option"})
   got: (#<Spec::Mocks::Mock:0x81b8ca3c @name="first_param">, {:some_other => "option"})

Wenn ich dies debugge, wird die erste Erwartung aufgerufen. Muss ich etwas anderes angeben, bevor ich aufeinanderfolgende Aufrufe mit der gleichen Nachricht, aber unterschiedlichen Parametern erwarten kann?

12voto

Baldu Punkte 5594

Versuchen Sie, Ihr Mock als Null-Objekt zu erstellen, um zusätzliche Methodenaufrufe zu ignorieren. Jede Ihrer Erwartungen muss weiterhin erfüllt werden, aber sie werden sich nicht gegenseitig behindern.

@my_mock = mock("a_mock").as_null_object

Dies folgt der Null-Objekt Muster, bei dem alle überflüssigen Nachrichten einfach ignoriert werden. Dies ist bei Mocks nützlich, wenn Sie sicherstellen wollen, dass eine Methode mit bestimmten Parametern aufgerufen wird, es Ihnen aber egal ist, ob sie mit anderen Parametern aufgerufen wird oder ob andere Methoden aufgerufen werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X