如何在 RSpec 中多次说“should_receive”
Posted
技术标签:
【中文标题】如何在 RSpec 中多次说“should_receive”【英文标题】:How to say "should_receive" more times in RSpec 【发布时间】:2010-11-22 15:10:21 【问题描述】:我的测试中有这个
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)
【问题讨论】:
【参考方案1】:这是过时的。请查看下方Uri's answer
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-countshttps://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-counts接收计数
下的更多详细信息希望对你有帮助 =)
【讨论】:
似乎这不适用于any_instance
?
@YoLudke 我不知道
应该使用Uri's answer中提到的新语法。【参考方案2】:
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
等【参考方案3】:
@JaredBeck 指出。该解决方案在 any_instance
通话中对我不起作用。
对于任何情况,我最终都使用 stub 而不是 should_receive。
Project.any_instance.stub(:some_method).and_return("value")
这适用于任何否。不过。
【讨论】:
***.com/questions/24595203/…【参考方案4】:should_receive
与 any_instance
不同,期望类接收指定次数的消息。
另一方面,any_instance
通常用于存根方法。
所以第一种情况是我们想要测试的期望,而第二种情况是通过一个方法到下一行,以便我们继续前进。
【讨论】:
Drenmi 感谢您花时间在我将近一年前添加的帖子中添加几个逗号...看起来答案的技术方面没有任何变化...你为什么要对我投反对票...?以上是关于如何在 RSpec 中多次说“should_receive”的主要内容,如果未能解决你的问题,请参考以下文章