現在、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
で実行しても効果はありません。
完全なバックトレースを表示するには、-b
オプションを指定してrspecを実行する必要があります
別の(簡単な)代替方法は、.rspec
ファイル、およびbacktrace
オプションを追加します。次のようになります。
--colour
--backtrace
これで完全なバックトレースが得られます。お役に立てれば。
これも機能します:
# Rails_helper.rb
RSpec.configure do |config|
config.full_backtrace = true
end
別のアプローチは、spec_helper.rb
のすべてのバックトレース除外パターンをクリアすることです。すべてのRSpec設定を1つの場所に保持し、.rspec file
または--backtrace
の明示的な.travis.yml
を取り除くことができるため、このソリューションが最も気に入っています。
# spec_helper.rb
RSpec.configure do |config|
config.backtrace_exclusion_patterns = []
end
他のすべてが失敗した場合のもう1つのオプションは、レスキューブロックを追加してスタックtryを出力するか、そこにバインディングpryステートメントを追加してshow-stack
を使用することです。
rescue Exception => e
puts ""
puts e.backtrace
puts ""
コントローラのエラーを取得してrspecに表示する方法がわかりません。時々表示されますが、どのような条件で表示されるのかわかりません。エラーをかなり迅速に確認する方法は次のとおりです。
別のターミナルセッションを開き、次を実行します。
tail -f log/test.log
次に、ターミナルセッションに戻り、エラーのあった仕様だけを実行します。
bin/rspec -b spec/requests/posts/index_spec.rb
ログの末尾に戻ると、エラーが表示されるはずです。うまくいけば、エラーを取り巻く他のものがあまりないはずです(失敗したテストを単独で実行したため)。