如何在RSpec中说“should_receive”更多次

时间:2009-08-25 13:28:44

标签: ruby-on-rails 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)

4 个答案:

答案 0 :(得分:213)

这已经过时了。请查看下面的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-counts处的详细信息

希望有帮助=)

答案 1 :(得分:48)

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)

答案 2 :(得分:0)

should_receive相反,

any_instance期望该类接收指定次数的消息。

另一方面,

any_instance通常用于存根方法。

所以第一个案例是我们想要测试的期望,而第二个案例是通过一个方法到下一行,所以我们可以继续。

答案 3 :(得分:0)

@JaredBeck指出。在any_instance电话上,该解决方案对我无效。

对于任何实例,我最终使用stub而不是should_receive。

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

这对任何不适用。时间虽然。