Ran*_*Tek 5 ruby unit-testing rspec ruby-on-rails
RSpec似乎按顺序匹配方法接收的消息.我不知道如何使以下代码工作:
allow(a).to receive(:f)
expect(a).to receive(:f).with(2)
a.f(1)
a.f(2)
a.f(3)
Run Code Online (Sandbox Code Playgroud)
我问的原因是有些调用a.f是由我的代码的上层控制的,所以我不能对这些方法调用添加期望.
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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这种期望方法调用的方式不会强加订单.
尝试这个作为一种可能的方法:
expect(a).to receive(:f).at_most(3).times
Run Code Online (Sandbox Code Playgroud)
您可以在这里找到更多示例
| 归档时间: |
|
| 查看次数: |
2393 次 |
| 最近记录: |