Unit testing Rails测试错误时抑制堆栈跟踪

Unit testing Rails测试错误时抑制堆栈跟踪,unit-testing,ruby-on-rails-3,stack-trace,Unit Testing,Ruby On Rails 3,Stack Trace,我是一个RubyonRails新手,正在编写测试。其中一些会产生异常;我希望“raketest”输出给我异常错误消息,而不是整个回溯。(我想写一些测试来测试未实现的功能,然后我会填写这些测试。) 例如,实际输出: Started E Finished in 0.081054 seconds. 1) Error: test_should_fail(VersioningTest): ActiveRecord::StatementInvalid: PGError: ERROR: null va

我是一个RubyonRails新手,正在编写测试。其中一些会产生异常;我希望“raketest”输出给我异常错误消息,而不是整个回溯。(我想写一些测试来测试未实现的功能,然后我会填写这些测试。)

例如,实际输出:

Started
E
Finished in 0.081054 seconds.

  1) Error:
test_should_fail(VersioningTest):
ActiveRecord::StatementInvalid: PGError: ERROR:  null value in column "client_ip" violates not-null constraint
: INSERT INTO "revisions" ("created_at", "id") VALUES ('2011-02-03 20:14:17', 980190962)
    /Users/rpriedhorsky/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract_adapter.rb:202:in `rescue in log'
    /Users/rpriedhorsky/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract_adapter.rb:194:in `log'
    /Users/rpriedhorsky/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/active_record/connection_adapters/postgresql_adapter.rb:496:in `execute'
    [... etc. etc. etc. ...]

1 tests, 0 assertions, 0 failures, 1 errors, 0 skips
期望输出:

Started
E
Finished in 0.081054 seconds.

  1) Error:
test_should_fail(VersioningTest):
ActiveRecord::StatementInvalid: PGError: ERROR:  null value in column "client_ip" violates not-null constraint

1 tests, 0 assertions, 0 failures, 1 errors, 0 skips
我在相反的方向上找到了info(),但没有找到关于抑制堆栈跟踪的信息

编辑:

这将是很好的打开和关闭它们容易;正如下面所指出的,有时它们对跟踪bug很有用。

你可以看看“回溯消音器”——对我来说(Rails 2.3.8),这是config/initializers/backtrace_dimeners.rb文件:

# Be sure to restart your server when you modify this file.

# You can add backtrace silencers for libraries that you're using but
# don't wish to see in your backtraces.
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }

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

Rails.backtrace_cleaner.add_silencer {|line| line =~ /gems/}
Rails.backtrace_cleaner.add_silencer {|line| line =~ /passenger/}
看起来你应该可以像这样画一条线

Rails.backtrace_cleaner.add_silencer {|line| true}
在config/environments/test.rb文件中,这将清除您的回溯(尽管它可能只适用于记录器-我不太熟悉该方法)


但是问问你自己——你真的想彻底消除回溯吗?它们对于追踪bug非常有用…

谢谢@xavier。它们是有用的-但是如果我有几个错误的测试,那么输出的量是巨大的。好的,所以堆栈跟踪来自文本装置中的坏数据;修复后,输出与我预期的一样。处理基于错误假设的问题的礼仪是什么?