【问题标题】:In RSpec, how to expect multiple messages with different parameters in any order?在 RSpec 中,如何期望以任何顺序具有不同参数的多条消息?
【发布时间】:2016-05-06 00:51:22
【问题描述】:

RSpec 似乎按顺序匹配方法接收到的消息。我不确定如何使以下代码工作:

allow(a).to receive(:f)
expect(a).to receive(:f).with(2)
a.f(1)
a.f(2)
a.f(3)

我问的原因是a.f的一些调用是由我的代码的上层控制的,所以我不能对这些方法调用添加期望。

【问题讨论】:

  • 你能澄清你的问题吗?你想通过这个测试来完成什么?你能提供一些关于af 是什么以及它们是如何定义的信息吗?

标签: ruby-on-rails ruby unit-testing rspec


【解决方案1】:

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

如您所见,这种期望方法调用的方式不会强加顺序。

【讨论】:

    【解决方案2】:

    试试这个作为一种可能的方法:

    expect(a).to receive(:f).at_most(3).times
    

    你可以找到更多例子here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      相关资源
      最近更新 更多