Как заставить rspec-2 выдавать полный след, связанный с неудачей теста? - PullRequest
94 голосов
/ 04 октября 2011

Прямо сейчас, если я запускаю свой набор тестов, используя rake spec, я получаю ошибку:

1) SegmentsController GET 'index' should work
   Failure/Error: get 'index'
   undefined method `locale' for #
   # ./spec/controllers/segments_controller_spec.rb:14:
      in `block (3 levels) in '

Это нормально, так как у меня есть ошибка:)

Проблема в том, что трассировка не очень полезна. Я знаю, что это сломалось в segments_controller_spec.rb, строка 14, но это именно то, где я называю тест:

### segments_controller_spec.rb:14
get 'index'

Я бы предпочел иметь фактический разрыв строки и полную трассировку, а не часть в папке spec.

Запуск с --trace не помогает.

Ответы [ 6 ]

242 голосов
/ 04 октября 2011

Вы должны запустить rspec с опцией -b, чтобы увидеть полные следы

29 голосов
/ 03 ноября 2011

Другой (более простой) вариант - отредактировать файл .rspec и добавить параметр backtrace. Это должно выглядеть примерно так:

--colour
--backtrace

Это даст вам полный след. Надеюсь, это поможет.

3 голосов
/ 05 января 2017

Это также будет работать:

# rails_helper.rb
RSpec.configure do |config|
  config.full_backtrace = true
end
2 голосов
/ 14 мая 2014

Другой подход заключается в очистке всех шаблонов исключений обратного следа в spec_helper.rb.Мне больше всего нравится это решение, так как я могу хранить все настройки RSpec в одном месте и избавиться от .rspec file или явного --backtrace в .travis.yml.

# spec_helper.rb
RSpec.configure do |config|
  config.backtrace_exclusion_patterns = []
end
0 голосов
/ 23 сентября 2014

Я не знаю, как отобразить ошибку контроллера в rspec. Иногда это проявляется, но я не знаю, в каких условиях это проявляется. Вот способ довольно быстро увидеть ошибку:

Откройте другой сеанс терминала и запустите:

tail -f log/test.log

Затем вернитесь к сеансу терминала и запустите только те спецификации, в которых была ошибка:

bin/rspec -b spec/requests/posts/index_spec.rb

Вернитесь к концу журнала, и вы должны увидеть ошибку, надеюсь, без слишком большого количества других вещей, окружающих ее (потому что вы запустили провальный тест самостоятельно).

0 голосов
/ 17 июня 2014

Еще один вариант, когда все остальное терпит неудачу, это просто добавить спасательный блок и распечатать стек, попробовать или добавить в него оператор связывания pry и использовать show-stack.

rescue Exception => e
  puts ""
  puts e.backtrace
  puts ""
...