Rspec 希望收到带有属性的消息并忽略其他消息

Rspec expect to recieve message with attributes and ignore others

我很长时间都在尝试编写规范。

我需要测试这个:

expect(Foo).to receive(:bar).with(some_args)

一切都会正常,除非 Foo 只收到 bar 一次。但它肯定会收到 bar 几次,因此更高的字符串会因

而失败
#<Foo (class)> received :bar with unexpected arguments

在那些电话上。

我如何测试 Foo 接收 bar 以及我需要的确切参数并忽略其他情况?

使用 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) 添加到块中,测试将失败。看起来正是您要找的,对吧?