2009-08-25 16 views
100

mam to w moim teścieJak powiedzieć „should_receive” więcej razy w RSpec

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

ale gdy obiekt otrzyma że wywołanie metody dwa razy, muszę zrobić

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

Czy istnieje sposób na powiedzenie czegoś takiego, jak

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

Odpowiedz

209

To jest nieaktualne. Proszę sprawdzić odpowiedź URI poniżej

2 razy:

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

dokładnie n razy:

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

przez co najmniej n razy:

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

Więcej szczegółów na https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-counts pod Liczba odbiorników

Nadzieja pomaga =)

+3

Wygląda na to, że to może nie działać z 'any_instance'? –

+0

@JaredBeck, dlaczego? –

+0

@YoLudke Nie wiem –

0

should_receive, w przeciwieństwie do any_instance, spodziewa się, że klasa otrzymuje wiadomość określoną liczbę razy.

any_instance z drugiej strony jest zwykle używany do stubowania metody.

Pierwszy przypadek to oczekiwanie, które chcielibyśmy przetestować, podczas gdy drugi przechodzi przez metodę do następnej linii, abyśmy mogli przejść dalej.

+1

Drenmi Doceniam czas poświęcony na dodanie kilku przecinków do wpisu, który dodałem prawie rok temu ... Wyglądało na to, że nie było żadnych zmian technicznych aspektów odpowiedzi ... głosować za to ...? – amnsan

38

Nowy expect składnia RSpec będzie wyglądać następująco:

2 razy:

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

dokładnie n razy:

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

przez co najmniej n razy:

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

Działa również składnia 'have_received'. 'oczekiwać (Projekt) .do have_received (: find) .exactly (n) .times' itp. –

0

@JaredBeck wskazał. Rozwiązanie nie zadziałało dla mnie przy wywołaniu any_instance.

Dla każdej instancji użyłem kodu pośredniczącego zamiast should_receive.

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

To zadziała dla każdego nie. czasami.

+0

http://stackoverflow.com/questions/24595203/rspec-any-instance-deprecation-how-to-fix-it –

Powiązane problemy