Подтвердить что ты не робот

Как сказать "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)
4b9b3361

Ответ 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")

Это будет работать для любого нет. раз.