Rspec希望通过属性接收消息并忽略其他消息

时间:2017-07-26 20:13:12

标签: ruby-on-rails rspec test-double

我试图在很长一段时间内写一个规范。

我需要测试一下:

return

除非expect(Foo).to receive(:bar).with(some_args) 只收到Foo一次,否则一切都会正常工作。但它肯定会多次收到bar,因此字符串更高会因

而失败
bar

这些电话。

如何使用我需要的确切参数测试#<Foo (class)> received :bar with unexpected arguments 收到Foo并忽略其他情况?

1 个答案:

答案 0 :(得分:1)

如何使用allow(Foo).to receive(:bar).and_call_original

例如,这些测试将成功通过:

class Foo
  def boo(b)
    b
  end
end

describe Foo do
  let(:a) { Foo.new }

  before do
    allow(a).to receive(:boo).and_call_original
  end

  it do
    expect(a).to receive(:boo).with(2)

    expect(a.boo(1)).to eq 1
    expect(a.boo(2)).to eq 2
    expect(a.boo(3)).to eq 3
  end
end

如果将expect(a).to receive(:boo).with(4)添加到块中,则测试将失败。这看起来像你在找什么,对吗?