2009-08-25 22 views
100

我有這個在我的測試怎麼說「should_receive」多次在RSpec的

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

,但是當對象收到方法調用兩次,我所要做的

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

有什麼方式如何說出類似於

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

回答

209

這已過時。請檢查下面

烏里的回答爲2次:

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

整整n次:

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

至少n次:在https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-counts

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

更多詳細信息下接收次數

希望它能幫助=)

+3

似乎這可能不適用於'any_instance'? – 2013-12-23 22:26:15

+0

@JaredBeck爲什麼? – 2014-01-03 12:42:17

+0

@YoLudke我不知道 – 2014-01-03 18:04:34

0

should_receive,相對於any_instance,預計,類接收消息的指定次數。

any_instance另一方面一般用於存根方法。

因此,第一種情況是我們想測試的期望,而第二種情況是通過一種方法到下一行,以便我們繼續前進。

+1

Drenmi我很欣賞你爲幾乎一年前添加的一個帖子添加了一些逗號的時間......它看起來不像是對技術方面的答案有任何改變......爲什麼你會失望投我這個......? – amnsan 2015-12-29 05:40:39

38

rspec的新expect語法看起來像這樣:

2次:

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

整整n次:

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

至少n次:

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

'have_received'語法也適用。 'expect(Project).to have_received(:find).exactly(n).times'等 – 2014-09-10 22:25:45

0

@JaredBeck指出。該解決方案在撥打any_instance時不適用於我。

對於任何實例我結束了使用存根,而不是should_receive。

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

這將工作任何沒有。時間雖然。

+0

http://stackoverflow.com/questions/24595203/rspec-any-instance-deprecation-how-to-fix-it – 2015-12-27 14:18:34

相關問題