给出类似于
的代码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。
答案 0 :(得分: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。