rspec-2を取得して、テストの失敗に関連する完全なトレースを取得するにはどうすればよいですか?


96

今私がテストスイートを実行rake specするとエラーが発生します:

1)SegmentsController GET 'index'は機能するはずです
   失敗/エラー:「インデックス」を取得
   未定義のメソッド「ロケール」#
   #./spec/controllers/segments_controller_spec.rb:14:
      「ブロック(3レベル)内」

エラーがあるのでこれは正常です:)

問題は、トレースがあまり役に立たないことです。segments_controller_spec.rb14行目で故障したことは知っていますが、これは私がテストを呼び出す場所です:

### segments_controller_spec.rb:14
get 'index'

私は、specフォルダー内の部分ではなく、実際の改行と完全なトレースを使用したいと思います。

で実行しても効果--traceはありません。


2
spin.atomicobject.com/2010/12/28/rspec-backtrace-filteringを確認してください。デフォルトのRSpecバックトレースフィルタリングを変更する方法があります
Bohdan

回答:


244

-b完全なバックトレースを表示するには、オプションを指定してrspecを実行する必要があります


9
わかりません。これも受け入れられた答えも、スペックファイルからのバックトレースを提供しません。または、私だけでは機能しませんo_O
janko-m

そして、rwiをsporkおよびguardで使用する場合は、.rspecファイルを作成し、それに-bを追加して、テストスイートの実行時に出力を取得できます
shicholas

これは確かに正しい答えです-ほとんどすべての場合、完全なバックトレース(railsやrspecなどのgemを含む)は必要ありません-必要なのは、gemによって引き起こされる何かをデバッグまたは理解するときだけです。自体。したがって、デフォルトのバックトレースのクリーンパターンに固執し、必要な場合は-bを使用してください。
Asfand Qazi 2013

エラー自体に関するスタックトレース情報は表示されませんでした。むしろ、rspec gemのスタックトレースを示しました
Aleksandrus

RSpec 3にも対応
Koen。

29

別の(より簡単な)代替方法は、.rspecファイルを編集してbacktraceオプションを追加することです。次のようになります。

--colour
--backtrace

これにより、完全なバックトレースが得られます。お役に立てれば。


はい!これはまさに私が必要としたものです。スタックをトレースして、仕様スタックではなく実際のエラーを追跡します。
DiegoSalazar 2013年

適切な綴りはだと思いますcolor。綴るとcolourモンティパイソンのジョークが出るかもしれません
WattsInABox

2
あなたがアメリカ出身なら適切です。英国では、彼らは色を書いており、rspecの人々は両方を許可するようにとても親切です;)
nathanvda '

2
それはボンネットにスパナを投げました!
eggmatters 2014年

3

これも機能します:

# rails_helper.rb
RSpec.configure do |config|
  config.full_backtrace = true
end

2

別のアプローチは、のすべてのバックトレース除外パターンをクリアすることspec_helper.rbです。すべてのRSpec設定を1か所に保持し、で削除.rspec fileまたは明示的--backtraceにできるため、このソリューションが最も気に入っています.travis.yml

# spec_helper.rb
RSpec.configure do |config|
  config.backtrace_exclusion_patterns = []
end

rspec 2.xにはそのオプションがないようです。
Michael Yagudaev 2014年

1

コントローラのエラーをrspecに表示する方法がわかりません。時々表示されますが、どのような条件で表示されるのかわかりません。ただし、エラーをかなりすばやく確認する方法は次のとおりです。

別のターミナルセッションを開いて実行します。

tail -f log/test.log

次に、ターミナルセッションに戻り、エラーが発生したスペックのみを実行します。

bin/rspec -b spec/requests/posts/index_spec.rb

ログの末尾に戻ると、エラーが表示されるはずです。うまくいけば、ログを囲む他の要素が多すぎないはずです(失敗したテストを単独で実行したため)。


0

他のすべてが失敗した場合のもう1つのオプションは、レスキューブロックを追加してスタックを出力するか、そこにバインディングのpryステートメントを追加して使用することshow-stackです。

rescue Exception => e
  puts ""
  puts e.backtrace
  puts ""

これは時々最良のオプションです。機能するようになったら、必ず削除してください。エラーが予想される場所をラップする必要があります。おそらくbeginrescueブロックをコントローラーのアクションメソッドの外部ステートメントとして配置します。またはを使用しますrescue_from
ベンジャミンアトキン2014

1
@batはい、これは最後の手段です。@ batのように、問題が解決したら削除する必要があります。git diffコミットする前に必ず実行することを忘れないでください。ベーコンが節約されます。
Michael Yagudaev 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.