2013-06-12 22 views
1

我想用rspec调试某些东西,但堆栈跟踪没有帮助:它们不够深入。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)>' 

这里,例如,有一个在我的宝石之一FactoryGirl方法中的一个问题,但所有的rspec的是给我在我自己的测试被触发它的行。不是很有帮助。

我试过在我的rspec命令中加入--backtrace,但是它不会再生成跟踪!

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

该文章建议只是重写rspec配置手动,这是有点hacky,但可能是最好的解决方案。如果这是真的:那么说rspec配置驻留在我的电脑上?这不是我的bundler目录中的所有其他宝石。

任何想法?我怎样才能得到rspec给我一个真实 backtrace,gems和所有?

回答

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 

现在我可以看到完整的痕迹!