2009-08-25 2 views
100

У меня есть это в моем тестеКак сказать «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) 

ответ

209

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

2 раза:

Project.should_receive(:find).twice.with(@project).and_return(@project) 

ровно п раз:

Project.should_receive(:find).exactly(n).times.with(@project).and_return(@project) 

по крайней мере п раз:

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 под Получать

Надеется, что это помогает =)

+3

Похоже, возможно, это не работает с 'any_instance'? –

+0

@ JaredBeck почему? –

+0

@YoLudke Я не знаю –

0

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

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

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

+1

Drenmi Я ценю время, которое вы потратили, чтобы добавить несколько запятых к сообщению, которое я добавил почти год назад ... Не похоже, чтобы какое-то изменение в техническом аспекте ответа ... Почему бы вам проголосуйте за меня ...? – amnsan

38

Новый expect синтаксис RSpec будет выглядеть следующим образом:

2 раза:

expect(Project).to receive(:find).twice.with(@project).and_return(@project) 

ровно п раз:

expect(Project).to receive(:find).exactly(n).times.with(@project).and_return(@project) 

по крайней мере п раз:

expect(Project).to receive(:msg).at_least(n).times.with(@project).and_return(@project) 
+1

Синтаксис 'has_received' также работает. 'expect (Project) .to have_received (: find) .exactly (n) .times' и т. д. –

0

@ JaredBeck указал. Решение для меня не срабатывало по вызову any_instance.

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

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

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

+0

http://stackoverflow.com/questions/24595203/rspec-any-instance-deprecation-how-to-fix-it –

Смежные вопросы