2013-06-12 21 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 

現在我可以看到完整的痕跡!