Как сказать «следует_принимать» больше раз в RSpec - PullRequest
104 голосов
/ 25 августа 2009

У меня есть это в моем тесте

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)

Ответы [ 4 ]

214 голосов
/ 25 августа 2009

Это устарело. Пожалуйста, проверьте ответ Ури ниже

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 под Количество при получении

Надеюсь, это поможет =)

48 голосов
/ 09 сентября 2014

Новый 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)
0 голосов
/ 16 октября 2015

@ указал ДжаредБек. Решение не сработало для меня на any_instance звонке.

В любом случае я использовал заглушку вместо should_receive.

Project.any_instance.stub(:some_method).and_return("value")

Это будет работать для любого нет. времен, хотя.

0 голосов
/ 21 февраля 2014

should_receive, в отличие от any_instance, ожидает, что класс получает сообщение указанное количество раз.

any_instance, с другой стороны, обычно используется для определения метода.

Итак, первый случай - это ожидание, которое мы хотели бы проверить, а второй - прохождение метода до следующей строки, чтобы мы могли двигаться дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...