Есть ли способ получить трассировку стека из 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

Другие вопросы по тегам