Есть ли способ получить трассировку стека из rspec, когда метод неожиданно вызывается больше раз, чем указано?
Я установил фиктивный объект и сказал ему ожидать проверки на nil и возвращать false:
status = double('status')
status.should_receive(:nil?).and_return(false)
Я жду только звонка на ноль? произойти один раз, но я получил ошибку в моем тесте rspec, говоря, что статус получил ноль? дважды.
Есть ли способ получить rspec, чтобы показать, где / как каждый вызов произошел?
добавление опции --backtrace не сработало.
1 ответ
Попробуйте что-то вроде этого:
status.should_receive(:nil?).twice { puts caller; false }
Это говорит rspec разрешить два вызова и каждый раз вызывать связанный блок.caller
метод генерирует полную обратную трассировку, которую вы сможете проанализировать наstdout
, Мы также вернемсяfalse
чтобы остаться на пути кода мы тестируем.
Если две обратные трассы трудно различить, и вас интересует только второй (неожиданный) вызов, установите два последовательных ожидания:
status.should_receive(:nil?).and_return(false)
status.should_receive(:nil?) { puts caller; false }
Здесь double вернет false при первом вызове и вызовет блок при втором.
Ссылка для установки ответов на ожидания:
https://github.com/rspec/rspec-mocks