Wie man in RSpec öfter "should_receive" sagt


112

Ich habe das in meinem Test

Project.should_receive(:find).with(@project).and_return(@project)

Aber wenn das Objekt diesen Methodenaufruf zweimal empfängt, muss ich das tun

Project.should_receive(:find).with(@project).and_return(@project)
Project.should_receive(:find).with(@project).and_return(@project)

Gibt es eine Möglichkeit, so etwas zu sagen?

Project.should_receive(:find).with(@project).and_return(@project).times(2)

Antworten:


214

Das ist veraltet. Bitte überprüfen Sie Uris Antwort unten

für 2 mal:

Project.should_receive(:find).twice.with(@project).and_return(@project)

für genau n mal:

Project.should_receive(:find).exactly(n).times.with(@project).and_return(@project)

für mindestens n mal:

Project.should_receive(:msg).at_least(n).times.with(@project).and_return(@project)

Weitere Informationen finden Sie unter https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-counts unter Receive Counts

Hoffe es hilft =)


3
Scheint, als ob das vielleicht nicht funktioniert any_instance?
Jared Beck

@ YoLudke Ich weiß nicht
Jared Beck

2
Sollte die neue Syntax verwenden, die in Uris Antwort erwähnt wird .
Theblang

61

Die neue expectSyntax von rspec sieht folgendermaßen aus:

für 2 mal:

expect(Project).to receive(:find).twice.with(@project).and_return(@project)

für genau n mal:

expect(Project).to receive(:find).exactly(n).times.with(@project).and_return(@project)

für mindestens n mal:

expect(Project).to receive(:msg).at_least(n).times.with(@project).and_return(@project)

1
Die have_receivedSyntax funktioniert auch. expect(Project).to have_received(:find).exactly(n).timesusw.
David Tuite

0

@ JaredBeck wies darauf hin. Die Lösung hat bei mir auf any_instanceAbruf nicht funktioniert .

Für jeden Fall habe ich stub anstelle von should_receive verwendet.

Project.any_instance.stub(:some_method).and_return("value")

Dies funktioniert für alle Nr. von Zeiten aber.



0

should_receiveany_instanceerwartet im Gegensatz zu , dass die Klasse die angegebene Anzahl von Malen empfängt.

any_instance Andererseits wird im Allgemeinen zum Stubben eines Verfahrens verwendet.

Der erste Fall ist also eine Erwartung, die wir testen möchten, während der zweite eine Methode hinter sich lässt und zur nächsten Zeile übergeht, damit wir weitermachen können.


1
Drenmi Ich schätze die Zeit, die Sie gebraucht haben, um ein paar Kommas zu einem Beitrag hinzuzufügen, den ich vor fast einem Jahr hinzugefügt hatte ... Es sah nicht so aus, als hätte sich der technische Aspekt der Antwort geändert ... Warum sollten Sie abstimmen? ich dafür ...?
Amnsan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.