我的控制器中有一行代码如下:
user.calendar.upcoming_events
其中“coming_events”是api调用。我正在为用户控制器创建测试,并且我想避免在我的测试中实际执行API调用。如何删除“coming_events”?
我希望这会有效,但到目前为止还没有。
let(:calendar) { double(:calendar, upcoming_events: []) }
before
user.stub(:calendar).and_return(calendar)
sign_in user
end
get :index
it { response.should be_success }
抛出
NoMethodError:
undefined method `upcoming_events' for nil:NilClass
知道我出错了吗?
答案 0 :(得分:2)
对于这种情况,我会使用rspec的stub_chain方法。
user.stub_chain(:calendar, :upcoming_events).and_return(...)
答案 1 :(得分:1)
答案 2 :(得分:0)
您的特定rspec调用组合本身没有任何问题,因为以下内容将成功:
describe 'rspec test' do
user = Object.new
let(:calendar) { double(:calendar, upcoming_events: []) }
before { user.stub(:calendar).and_return(calendar) }
it { expect(user.calendar.upcoming_events).to eq([]) }
end
您可以共享完整的错误输出,包括堆栈跟踪吗?