Rspec ожидает получения сообщения с атрибутами и игнорирует другие

Я пытаюсь написать спецификацию очень долго.

Мне нужно проверить это:

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

и все будет работать нормально, если только Foo получено bar только однажды. Но он получит bar несколько раз наверняка, так что строка выше терпит неудачу с

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

на эти звонки.

Как я могу проверить это Foo получает bar с точными аргументами мне нужно и игнорировать другие случаи?

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) в блок, тест не пройден. Похоже, что вы ищете, верно?

Другие вопросы по тегам