RSpec似乎按顺序匹配方法接收的消息。我不确定如何使以下代码工作:
allow(a).to receive(:f)
expect(a).to receive(:f).with(2)
a.f(1)
a.f(2)
a.f(3)
我问的原因是a.f
的一些调用是由我的代码的上层控制的,所以我不能对这些方法调用添加期望。
答案 0 :(得分:9)
RSpec间谍是一种测试这种情况的方法。要监视方法,请使用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
正如您所看到的,这种期待方法调用的方式并没有强加订单。
答案 1 :(得分:0)