ruby-on-rails 如何在RSpec中多次表示“should_receive”

kx5bkwkv  于 2022-12-24  发布在  Ruby
关注(0)|答案(4)|浏览(132)

我的测试里有这个

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)
ktecyv1j

ktecyv1j1#

已过时。请检查下面的Uri's answer

两次:

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接收计数

cgyqldqp

cgyqldqp2#

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)
fcg9iug3

fcg9iug33#

@JaredBeck指出,这个解决方案在any_instance通话中对我不起作用。
对于任何示例,我最终都使用stub而不是should_receive。

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

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

oxiaedzo

oxiaedzo4#

any_instance相反,should_receive期望类接收指定次数的消息。
另一方面,any_instance通常用于清除方法。
所以第一种情况是我们想要测试的一个期望,而第二种情况是越过一个方法到下一行,这样我们就可以继续了。

相关问题