如何修复 RSpec SystemStackError

How to fix 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.

这似乎是一个 heisen-bug - 如果我有一些其他规格 运行 首先,我没有得到 SystemStackError。

我该如何解决?

我正在使用 RSpec 3.3.0 和 Rails 4.1.13。

问题似乎是期望 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_username 委托给装饰对象 user 以及 RSpec 必须处理 name 有关,但我不能肯定。

这已被举报,所有者是 treating it as a bug