1

rspec で何かをデバッグしようとしていますが、スタック トレースは役に立ちません。

NoMethodError:
   undefined method `after_create=' for #<Spree::Calculator::FlatRate:0x007ffc988d1868>
 # ./spec/models/stripe_event_processor_spec.rb:63:in `block (2 levels) in <top (required)>'
 # ./spec/models/stripe_event_processor_spec.rb:69:in `block (2 levels) in <top (required)>'
 # ./spec/models/stripe_event_processor_spec.rb:81:in `block (2 levels) in <top (required)>'

ここでは、たとえば、私の gem の 1 つの FactoryGirl メソッド内に問題がありますが、rspec が私に提供しているのは、それをトリガーしている私自身のテストの行だけです。とても役に立ちません。

--backtraceコマンドに追加しようとしましrspecたが、トレースが作成されなくなりました!

この記事を見ると、デフォルトの rspec 構成が、スタック トレースがgems/フォルダーに入ったときにそれをフィルター処理することが原因であると思われます。

この記事では、rspec 構成を手動でオーバーライドすることを提案しています。これは少しハックですが、最善の解決策である可能性があります。それが本当なら、上記のrspec構成は私のコンピューターのどこにありますか? bundler他のすべての宝石と一緒に私のディレクトリにはありません。

何か案は?どうすれば rspec で実際のバックトレースを取得できgemsますか?

4

1 に答える 1

2

次のようにオーバーライドできるため、コンピューターのどこで が定義されているかを調べる必要がないことがわかりました。config.backtrace_clean_patternsspec_helper.rb

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

がデフォルトであり、次のように spec_helper.rb ファイルに入れるだけで簡単にオーバーライドできます。

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 = [
  ]
end

完全な痕跡が見えるようになりました!

于 2013-06-12T21:00:44.063 に答える