如何在 RSpec 中多次使用“ should_take”

我的测试里有这个

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)
68155 次浏览

这个已经过时了,请检查下面的 尤里的回答

两次:

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

希望对你有所帮助

should_receive, as opposed to any_instance, expects that the class receives message the specified number of times.

另一方面,any_instance通常用于对方法进行撞击。

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

Rspec 的新 expect语法如下:

两次:

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)

@ JaredBeck 指出,解决方案在 any_instance电话上对我不起作用。

对于任何情况,我最终都使用 stub 而不是 should _ access。

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

这将工作的任何数量的次数虽然。