如何在Rails TestCases中显示更长的跟踪
是否有设置的配置变量,或其他一些方式让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
看看你是否没有文件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!
如果第一个还不够,但filter只会缩短路径,而消音器会从回溯中删除一些行。
您可以在railties/lib/rails/backtrace_cleaner.rb
和activesupport/lib/active_support/backtrace_cleaner.rb
找到源代码。
您可以像这样自定义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
您可以尝试将全局变量$ DEBUG设置为非零值。 如果那是最小的过滤你的回溯,设置$DEBUG = true
将确保打印出整个回溯。
您可以尝试使用以下方法包装失败的代码:
begin # failing code rescue Exception => e puts e.message puts e.backtrace end
另一种方法是使用ruby-debug
应用程序。