确保在测试期间的某个时刻使用args调用方法

时间:2014-04-03 21:33:58

标签: ruby rspec mocking expectations

我想确保在测试期间的某个时刻使用Foo.bar调用true方法。到目前为止,我只能对第一次通话断言Foo.bar。我需要断言任何电话

这是我到目前为止所做的工作但不起作用:

  expect(Foo).to receive(:bar).at_least(:once).with("true")

  Foo.bar("false")
  Foo.bar("false")
  Foo.bar("true")
  Foo.bar("false")

第一个Foo.bar失败,因为" false"不匹配我的" true"期望。如果在测试过程中在某些点调用Foo.bar("true"),您将如何重写此内容?

1 个答案:

答案 0 :(得分:1)

我认为在这种情况下你需要做我认为的方法存在等同于as_null_object的方法:

describe Foo
  describe 'testing .bar multiple times' do
    before do
      allow(Foo).to receive(:bar) # stub out message
    end

    it "can determine how many times it has been called with 'true'" do
      expect(Foo).to receive(:bar).at_least(:once).with("true")
      expect(Foo).to receive(:bar).at_most(:once).with("true")
      Foo.bar("false")
      Foo.bar("false")
      Foo.bar("true")
      Foo.bar("false")
    end
  end
end