Ruby on rails 在RSpec中,如何以任意顺序期望具有不同参数的多条消息?
RSpec似乎按照顺序匹配方法接收的消息。我不确定如何使以下代码正常工作:Ruby on rails 在RSpec中,如何以任意顺序期望具有不同参数的多条消息?,ruby-on-rails,ruby,unit-testing,rspec,Ruby On Rails,Ruby,Unit Testing,Rspec,RSpec似乎按照顺序匹配方法接收的消息。我不确定如何使以下代码正常工作: allow(a).to receive(:f) expect(a).to receive(:f).with(2) a.f(1) a.f(2) a.f(3) 我询问的原因是,a.f的某些调用由我的代码的上层控制,因此我无法为这些方法调用添加期望值。尝试以下方法: expect(a).to receive(:f).at_most(3).times 你可以找到更多的例子来测试这种情况。若要监视某个方法,请使用allow对其
allow(a).to receive(:f)
expect(a).to receive(:f).with(2)
a.f(1)
a.f(2)
a.f(3)
我询问的原因是,
a.f
的某些调用由我的代码的上层控制,因此我无法为这些方法调用添加期望值。尝试以下方法:
expect(a).to receive(:f).at_most(3).times
你可以找到更多的例子来测试这种情况。若要监视某个方法,请使用
allow
对其进行存根,除方法名称外不带任何约束,调用该方法,然后expect
调用确切的方法
例如:
allow(a).to receive(:f)
a.f(2)
a.f(1)
a.f(3)
expect(a).to have_received(:f).exactly(3).times
[1, 2, 3].each do |arg|
expect(a).to have_received(:f).with(arg)
end
正如您所看到的,这种期望方法调用的方式不会强加命令。您能澄清您的问题吗?你想通过这个测试完成什么?你能告诉我什么是
a
和f
以及它们是如何定义的吗?