Ruby 如何在Rails测试用例中显示更长的跟踪
是否有要设置的配置变量,或者其他方法来获取RailsRuby 如何在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
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进行测试。哇,似乎是解决方案!完全忘记了这个初始值设定项。