2012-12-21 15 views
10

RSpec(最新バージョン、2.12.2)を使用して、私が取り組んでいる小さなRubyクラスをテストしています。私の問題は、RSpecテストが失敗すると、テスト出力が非常に冗長で、エラーメッセージの巨大なリストが表示されます。ほとんどの場合、完全なバックトレースと思われます。つまり、実際のエラーメッセージとトレースの先頭を確認するためにスクロールする必要があります。テスト失敗のRSpec短いバックトレース出力

私はRSpecがこれをすると思われますが、それは私のためにやっているようには思えません。例えば、私は(ちょうどL132上にある一つのテストを実行します)rspec spec/my_spec.rb:132を実行する場合、私はこの出力を得る:

あなたが見ることができるように、
Failure/Error: @f.has_changed?("test").should be_true 
    expected: true value 
     got: false 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-expectations-2.12.1/lib/rspec/expectations/fail_with.rb:33:in `fail_with' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-expectations-2.12.1/lib/rspec/expectations/handler.rb:33:in `handle_matcher' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-expectations-2.12.1/lib/rspec/expectations/syntax.rb:53:in `should' 
# /Users/JackFranklin/Dropbox/Sites/rubygems/filefixtures/spec/filefixtures_spec.rb:137:in `block (4 levels) in <top (required)>' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example.rb:114:in `instance_eval' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example.rb:114:in `block in run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example.rb:254:in `with_around_each_hooks' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example.rb:111:in `run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:388:in `block in run_examples' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:384:in `map' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:384:in `run_examples' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:369:in `run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `block in run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `map' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `block in run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `map' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/example_group.rb:370:in `run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:28:in `block (2 levels) in run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:28:in `map' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:28:in `block in run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/reporter.rb:34:in `report' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/command_line.rb:25:in `run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/runner.rb:80:in `run' 
# /Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-core-2.12.2/lib/rspec/core/runner.rb:17:in `block in autorun' 

、絶対に巨大です。 RSpecに渡された設定を変更する可能性のあるRSpec設定ファイルがありません。

誰もこれまで見たことがありますか?私はグーグルを試みたが、検索は無駄だった。

編集:

RSpec.configure do |config| 
    # RSpec automatically cleans stuff out of backtraces; 
    # sometimes this is annoying when trying to debug something e.g. a gem 
    config.backtrace_clean_patterns = [ 
    /\/lib\d*\/ruby\//, 
    /bin\//, 
    /gems/, 
    /spec\/spec_helper\.rb/, 
    /lib\/rspec\/(core|expectations|matchers|mocks)/ 
    ] 
end 

しかし、これは違いはありません。私は、それはデフォルトのバックトレースのクリーニングを適用したことを確認するために設定を設定します。出力を見れば、それはほとんどがフィルタリングされているはずですが、設定が適用されていないようですね?再び

編集:私の設定で

、私は偶数ラインをクリーニングする必要があるかどうかを確認するためにcleaned_from_backtrace?(line)を実行することができます。これは、trueを返す:

config.cleaned_from_backtrace?("/Users/JackFranklin/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rspec-expectations-2.12.1/lib/rspec/expectations/fail_with.rb:33:in `fail_with'") 

しかし、実際の出力は同じです!

編集3:

私は、コマンドrspec、そしてより多くの何もRSpecのを実行しています。

--color 
--format progress 

をして設定を適用することができないか~/.rspecファイルはありません:プロジェクトの.rspecファイルが含まれています。

答えて

11

RSpecフォークon Githubともう少しチャットした後、私は問題を見つけました。

デフォルトでは、RSpecはRegex/gems /と一致するバックトレースから行を削除するという問題がありました。私はという名前のフォルダ内に私のプロジェクトを持っていたので、バックトレースのすべての行が削除されていたので、RSpecはあなたにバックトレース全体を見せてくれます。

これは、私が見ていた動作を説明しています。

これはいつもそんなに愚かなことです。他の誰かがこれをやってくれたらいいなと思っています。

+0

それは素晴らしいです。私はいつもRSpecが非常に冗長であったことに腹を立てていました。 – RobinGower

+0

https://www.relishapp.com/rspec/rspec-core/docs/configuration/excluding-lines-from-the-tracetraceを使用すると、カスタムバックトレースフィルタパターンを追加できます。 –

3

-bでRSpecを実行しているようですが、完全なバックトレースが必要です。通常、RSpecは、テストがひどく失敗した場合(つまり、アサーションに失敗するのではなく例外をスローした場合)でも、それ自体の内部バックトレースを表示しません。 -bまたは--backtraceで明示的に実行していない場合は、設定ファイル.rspecに設定されていないことを確認するか、IDEなどを渡していないことを確認してください。

+0

おかげでジムは - しかし、私はどこにも 'B'オプションを適用していないよと確信しています - 私はこれをより明確に示すために質問を更新しました。 –

1

ジム氏によると、フルバックトレースを有効にするまたは--backtraceオプションがあります。それを引き起こしているのは.rspecファイルだけではないことに留意してください。 ~/.rspec(開発者が推奨するオプション)もあります。

頭に浮かべるもう1つのことは、フォーマッタが必要とするバックトレースのどの部分であっても吐き出すことができるということです。フォーマッタは、サードパーティのフォーマッタがバックトレースフィルタリング設定を尊重する簡単な方法を公開していますが、サードパーティのフォーマッタを使用している場合は、それを正しく使用しているという保証はありません。組み込みのrspecフォーマッタの1つを使用していますか?

最後に、それがそれらのものではない場合、私はアイデアがありません。私はあなたの質問に答えるために遊ぶ例を持たなければならないでしょう。再現可能な例を考え出すことができますか(要点は、うまくいけば)?私はirc.freenode.netのrspecチャンネルに定期的に出かけようとしています。だから、あなたは私をそこに捕まえることができ、私たちはそのようなトラブルシューティングを行うことができます。

+0

私は質問を更新しました - 私はプロジェクトで '.rspec'を持っていますが、バックトレースに関連するものは何も実行しておらず、'〜/ .rspec'もありません。 –

0

オプションでバックトレースをフィルタリングすることが可能であるバージョン3.4.0/2015年11月11日から:

RSpec.configure do |config| 
    config.filter_rails_from_backtrace! 
end