2015-10-02 23 views
0

鑑於類似的代碼如何修復RSpec的SystemStackError

module UserDecorator 
    def profile 
    "Hi, my name is #{name}" 
    end 
end 

require 'rails_helper' 

describe UserDecorator do 
    let(:user) { build(:user) } 
    let(:decorated_user) { user.decorate } 

    describe '#profile' do 
    it 'uses #name' do 
     expect(decorated_user).to receive(:name).and_call_original 
     decorated_revenue_report_view.profile 
    end 
    end 
end 

,我發現了以下錯誤:

1) UserDecorator#profile uses name 
    Failure/Error: Unable to find matching line from backtrace 
    SystemStackError: 
     stack level too deep 
    # /Users/agrimm/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/rspec-mocks-3.3.2/lib/rspec/mocks/argument_list_matcher.rb:65 
    # 
    # Showing full backtrace because every line was filtered out. 
    # See docs for RSpec::Configuration#backtrace_exclusion_patterns and 
    # RSpec::Configuration#backtrace_inclusion_patterns for more information. 

這似乎是一個海森 - 錯誤 - 如果我有一些運行其他規格首先,我沒有得到SystemStackError。

我該如何解決?

我正在使用RSpec 3.3.0和Rails 4.1.13。

回答

0

問題似乎預計decorated_user收到name,而不是user。改變規格爲

require 'rails_helper' 

describe UserDecorator do 
    let(:user) { build(:user) } 
    let(:decorated_user) { user.decorate } 

    describe '#profile' do 
    it 'uses User#name' do 
     expect(user).to receive(:name).and_call_original 
     decorated_revenue_report_view.profile 
    end 
    end 
end 

似乎解決了這個問題。我懷疑這與decorated_user有關name的裝飾物user和RSpec必須處理name有關,但我不能肯定地說。

這已報告,業主是treating it as a bug