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 中的 FactoryGirl 方法存在问题,但 rspec 给我的只是我自己的测试中触发它的行。不是超级有帮助。

我已经尝试添加--backtrace到我的rspec命令中,但它不再进行跟踪!

我怀疑,看这篇文章,这可能是因为默认的 rspec 配置在堆栈跟踪进入gems/文件夹时会对其进行过滤。

该文章建议手动覆盖 rspec 配置,这有点 hacky,但可能是最好的解决方案。如果这是真的:那么所说的 rspec 配置驻留在我的计算机上的什么位置?它不在我bundler所有其他宝石的目录中。

有任何想法吗?我怎样才能让 rspec 给我一个真正的回溯,gems等等?

4

1 回答 1

2

事实证明,我不需要找出在我的计算机config.backtrace_clean_patterns上定义的位置,因为我可以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 = [
    /\/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 回答