it-swarm.com.ru

Как заставить rspec-2 выдавать полный след, связанный с неудачей теста?

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

 1) SegmentsController GET 'index' должен работать 
 Сбой/Ошибка: получить 'index' 
 Неопределенный метод `locale 'для # 
 # ./Spec/controllers /segments_controller_spec.rb:14:
 в блоке (3 уровня) в 

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

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

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

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

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

94
marcgg

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

242
solnic

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

--colour
--backtrace

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

29
nathanvda

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

# Rails_helper.rb
RSpec.configure do |config|
  config.full_backtrace = true
end
3
Maria V

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

# spec_helper.rb
RSpec.configure do |config|
  config.backtrace_exclusion_patterns = []
end
2
Nowaker

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

rescue Exception => e
  puts ""
  puts e.backtrace
  puts ""
0
Michael Yagudaev

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

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

tail -f log/test.log

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

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

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

0
Benjamin Atkin