Ruby 如何在Rails测试用例中显示更长的跟踪

Ruby 如何在Rails测试用例中显示更长的跟踪,ruby,ruby-on-rails-3,unit-testing,Ruby,Ruby On Rails 3,Unit Testing,是否有要设置的配置变量,或者其他方法来获取RailsActiveSupport::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_ada

是否有要设置的配置变量,或者其他方法来获取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

您可以尝试将全局变量$DEBUG设置为非nil值。如果这是筛选回溯的minitest,则设置
$DEBUG=true
将确保打印出整个回溯。

您可以尝试使用以下内容包装失败的代码:

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

另一种方法是使用
ruby debug

调试应用程序,查看您是否没有文件
config/initializers/backtrace\u消音器.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\u过滤器如果第一个还不够,但是过滤器只会使路径变短,而消音器会从回溯中删除一些行


您可以在
railties/lib/rails/backtrace\u cleaner.rb
activesupport/lib/active\u support/backtrace\u cleaner.rb
中找到有用的源代码。

您可以像这样自定义小型测试堆栈跟踪,例如:

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

你能举个例子吗?我讨厌乞讨赏金,但如果你不赏金(给任何人,不一定是我),那就浪费了。那会很伤心,不是吗?;-)完成:P顺便说一句,感谢您的帮助:)同时更改为minitest,其中定义$DEBUG起到了神奇的作用。不过,没有使用UnitTest进行测试。哇,似乎是解决方案!完全忘记了这个初始值设定项。