Как сказать "should_receive" больше раз в RSpec
У меня это в моем тесте
Project.should_receive(:find).with(@project).and_return(@project)
но когда объект получает этот вызов метода два раза, я должен сделать
Project.should_receive(:find).with(@project).and_return(@project)
Project.should_receive(:find).with(@project).and_return(@project)
Есть ли способ сказать что-то вроде
Project.should_receive(:find).with(@project).and_return(@project).times(2)
Ответы
Ответ 1
Это устарело. Пожалуйста, проверьте ответ Uri ниже
в 2 раза:
Project.should_receive(:find).twice.with(@project).and_return(@project)
ровно n раз:
Project.should_receive(:find).exactly(n).times.with(@project).and_return(@project)
в течение по крайней мере n раз:
Project.should_receive(:msg).at_least(n).times.with(@project).and_return(@project)
подробнее в https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-counts в разделе Получить количество
Надеюсь, что это поможет =)
Ответ 2
Новый синтаксис expect
для rspec будет выглядеть так:
в 2 раза:
expect(Project).to receive(:find).twice.with(@project).and_return(@project)
ровно n раз:
expect(Project).to receive(:find).exactly(n).times.with(@project).and_return(@project)
в течение по крайней мере n раз:
expect(Project).to receive(:msg).at_least(n).times.with(@project).and_return(@project)
Ответ 3
should_receive
, в отличие от any_instance
, ожидает, что класс получит сообщение указанное количество раз.
any_instance
, с другой стороны, обычно используется для обнуления метода.
Итак, первый случай - это ожидание того, что мы хотели бы протестировать, а второй - пройти метод до следующей строки, чтобы мы могли двигаться дальше.
Ответ 4
@JaredBeck отметил. Решение для меня не срабатывало при вызове any_instance
.
Для любого экземпляра я закончил использование заглушки, а не should_receive.
Project.any_instance.stub(:some_method).and_return("value")
Это будет работать для любого нет. раз.