web-dev-qa-db-ja.com

テストの失敗に関連する完全なトレースを提供するためにrspec-2を取得する方法は?

現在、rake specを使用してテストスイートを実行すると、エラーが発生します。

 1)SegmentsController GET 'index'は動作するはずです
失敗/エラー:get 'index' 
 undefined method `locale 'for#
#./spec/controllers /segments_controller_spec.rb:14:
 in `ブロック(3レベル)in '

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

問題は、トレースがあまり役に立たないことです。私はそれがsegments_controller_spec.rb、14行目で壊れたことを知っていますが、これは私がテストを呼ぶところです:

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

実際の行分割と完全なトレースを使用したいのですが、specフォルダー内のパーツではありません。

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

94
marcgg

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

242
solnic

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

--colour
--backtrace

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

29
nathanvda

これも機能します:

# Rails_helper.rb
RSpec.configure do |config|
  config.full_backtrace = true
end
3
Maria V

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

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

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

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

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

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

tail -f log/test.log

次に、ターミナルセッションに戻り、エラーのあった仕様だけを実行します。

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

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

0
Benjamin Atkin