我已经获得了一个看起来像这样的控制器规范
describe ExportController do
describe 'GET index' do
target_params = {type:'a', filter: 'b'}
expect(DataFetcher).to receive(:new).with(target_params)
get :index
end
end
控制器看起来像这样
class ExportController < ApplicationController
def index
@fetcher = DataFetched.new(target_params)
...
end
end
如果我像这样运行规范,一切都很酷。但是我想对生成的DataFetcher对象做一些事情
class ExportController < ApplicationController
def index
@fetcher = DataFetcher.new(target_params)
@list = @fetcher.fetch_list
...
end
end
现在,当我运行规范时,它失败并出现无方法错误
NoMethodError
undefined method 'fetch_list' for nil:NilClass
那是什么?问题是,当我通过我的实际应用程序点击此控制器时,它按预期工作。 rspec在幕后做了什么,我将如何正确设置?
感谢所有
答案 0 :(得分:1)
您的expect
语句导致nil
从new
返回fetch_list
,而fetch_list
未定义expect(DataFetcher).to receive(:new).with(target_params)
.and_return(instance_double(DataFetcher, fetch_list: [])
。如果您希望该行成功,您将需要返回实现{{1}}方法的内容,如下所示:
{{1}}
答案 1 :(得分:1)
或者您也可以在末尾添加:.and_call_original
,哪个恕我直言更干净
expect(DataFetcher).to receive(:new).with(target_params)
.and_call_original