我的测试中有这个
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)
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://rspec.info/documentation/3.5/rspec-mocks/RSpec/Mocks/MessageExpectation.html下的约束接收计数
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)
should_receive
,与 any_instance
相反,期望类接收指定次数的消息。
另一方面,any_instance
通常用于存根方法。
因此,第一个情况是我们想要测试的期望,而第二个情况是通过方法到达下一行,以便我们可以继续。
@JaredBeck 指出。该解决方案在
any_instance
通话中对我不起作用。
对于任何实例,我最终都使用存根而不是 should_receive。
Project.any_instance.stub(:some_method).and_return("value")
这适用于任何号码。虽然有很多次。
更新: 语法已弃用。看评论。