如何在RSpec中说"should_receive"更多次

Jak*_*old 104 rspec ruby-on-rails

我的测试中有这个

Project.should_receive(:find).with(@project).and_return(@project)
Run Code Online (Sandbox Code Playgroud)

但是当对象接收到该方法调用两次时,我必须这样做

Project.should_receive(:find).with(@project).and_return(@project)
Project.should_receive(:find).with(@project).and_return(@project)
Run Code Online (Sandbox Code Playgroud)

有什么方法可以说出类似的话

Project.should_receive(:find).with(@project).and_return(@project).times(2)
Run Code Online (Sandbox Code Playgroud)

Sta*_*len 214

这已经过时了.请查看下面的Uri答案

2次:

Project.should_receive(:find).twice.with(@project).and_return(@project)
Run Code Online (Sandbox Code Playgroud)

正好n次:

Project.should_receive(:find).exactly(n).times.with(@project).and_return(@project)
Run Code Online (Sandbox Code Playgroud)

至少n次:

Project.should_receive(:msg).at_least(n).times.with(@project).and_return(@project)
Run Code Online (Sandbox Code Playgroud)

在更多的细节https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-counts接收计数

希望它有帮助=)

  • 似乎这可能不适用于`any_instance`? (3认同)
  • 应该使用[Uri的答案](http://stackoverflow.com/a/25744654/1747491)中提到的新语法. (2认同)

Uri*_*ssi 49

expectrspec 的新语法如下所示:

2次:

expect(Project).to receive(:find).twice.with(@project).and_return(@project)
Run Code Online (Sandbox Code Playgroud)

正好n次:

expect(Project).to receive(:find).exactly(n).times.with(@project).and_return(@project)
Run Code Online (Sandbox Code Playgroud)

至少n次:

expect(Project).to receive(:msg).at_least(n).times.with(@project).and_return(@project)
Run Code Online (Sandbox Code Playgroud)