Как показать более длинные трассировки в Rails TestCases - PullRequest
8 голосов
/ 02 августа 2011

Есть ли переменная конфигурации для установки или какой-либо другой способ заставить Rails ActiveSupport::TestCase показывать более одной линии трассировки?В противном случае действительно сложно отладить.

Пример:

ERROR test_something (0.73s) 
      SystemStackError: stack level too deep
      /Users/mario/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/connection_adapters/abstract/database_statements.rb:153

Ответы [ 4 ]

29 голосов
/ 05 августа 2011

Проверьте, нет ли у вас файла config/initializers/backtrace_silencers.rb

Там написано:

# You can also remove all the silencers if you're trying to debug
# a problem that might stem from framework code.
Rails.backtrace_cleaner.remove_silencers!

Вы также можете позвонить remove_filters!, если первого было недостаточно, но фильтры только делаютпути короче, в то время как глушители удаляют некоторые строки из обратной трассировки.

Вы можете найти исходный код в railties/lib/rails/backtrace_cleaner.rb и activesupport/lib/active_support/backtrace_cleaner.rb полезными.

2 голосов
/ 21 марта 2014

Вы можете настроить трассировку Minitest, например, следующим образом:

class MyBacktraceFilter
  def filter bt
    bt.dup.reject{|x| not x.to_s =~ /#{::Rails.root.to_s}/}
  end
end
MiniTest.backtrace_filter = MyBacktraceFilter.new

Метод filter принимает полную трассировку стека в параметре bt в виде массива и возвращает отфильтрованный массив. Если вы хотите, чтобы весь стек отображался, просто введите:

class MyBacktraceFilter
  def filter bt
    bt
  end
end
MiniTest.backtrace_filter = MyBacktraceFilter.new
1 голос
/ 05 августа 2011

Вы можете попытаться обернуть ошибочный код с помощью:

begin
  # failing code
rescue Exception => e
  puts e.message
  puts e.backtrace
end

Другим способом является отладка вашего приложения с помощью ruby-debug.

1 голос
/ 05 августа 2011

Вы можете попробовать установить глобальную переменную $ DEBUG в ненулевое значение. Если это самый низкий уровень, который фильтрует вашу обратную трассировку, установка $DEBUG = true гарантирует, что вся обратная трассировка будет распечатана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...