2011-02-03 132 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