我的测试中有这个
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)
这是过时的。请在下面查看 Uri 的答案
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 次:
Project.should_receive(:msg).at_least(n).times.with(@project).and_return(@project)
接收计数下的 https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-counts 中的更多详细信息
希望它有帮助=)
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)
have_received
语法也有效。 expect(Project).to have_received(:find).exactly(n).times
等。
@JaredBeck 指出。该解决方案在 any_instance
通话中对我不起作用。
对于任何情况,我最终都使用了 stub 而不是 should_receive。
Project.any_instance.stub(:some_method).and_return("value")
这将适用于任何否。不过。
should_receive
与 any_instance
不同,期望类接收指定次数的消息。
另一方面,any_instance
通常用于存根方法。
所以第一种情况是我们想要测试的期望,而第二种情况是通过一个方法到下一行,这样我们就可以继续前进了。
不定期副业成功案例分享
any_instance
?