2011-02-03 134 views
1

我是Ruby on Rails新手和编写测试。其中一些产生了例外;我想“耙测试”输出给我的异常错误消息,但不是整个回溯。 (我想写一个锻炼未实现的功能,我将然后填写测试)Rails测试错误时抑制堆栈跟踪

例如,实际输出:

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 

我在相反的方向找到信息(e.g.),但不能抑制堆栈轨迹。

编辑:

这将是很好的上下车轻松地把他们。正如下面所指出的,有时它们对追踪错误很有用。

+0

好吧,所以事实证明堆栈跟踪来自文本夹具中的不良数据;随着修复,产量如我所料。处理基于错误假设的问题的礼仪是什么? – Reid 2011-02-04 15:30:45

回答

1

你可以看看“回溯消音器” - 对我来说(Rails的2.3.8),这是文件的配置/初始化/ backtrace_silencers.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 /环境/ test.rb文件,这将擦干净回溯离开(虽然它可能只是适用于记录仪 - 我不是很熟悉的方法)。

但问问自己 - 你是否真的想完全消除回溯?他们可以非常有用的跟踪错误...

+0

谢谢@xavier。它们是有用的 - 但是如果我有几个错误的测试,输出量是压倒性的。 – Reid 2011-02-04 15:04:49