如何在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.rbactivesupport/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应用程序。