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