2015-03-02 68 views
0

我已經得到了控制規範,看起來像這樣測試實例,然後調用一個方法生成的對象上失敗

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 

現在,當我運行spec失敗有沒有方法錯誤

NoMethodError 
    undefined method 'fetch_list' for nil:NilClass 

請告訴我與呢?事情是,當我通過我的實際應用程序打這個控制器時,它按預期工作。 rspec在幕後做了什麼,以及我將如何正確設置它?

感謝你們

回答

1

expect語句引起nilnew返回,不具備fetch_list定義。如果您希望該行成功,您需要返回實現fetch_list方法的內容,如下所示:

expect(DataFetcher).to receive(:new).with(target_params) 
    .and_return(instance_double(DataFetcher, fetch_list: []) 
+0

謝謝。當我以這種方式期望使用DataFetcher時,它是否轉換爲測試雙精度? – Neil 2015-03-02 22:16:08

+0

我不確定「it」是什麼意思,但DataFetcher.new將在傳遞target_params時返回一個測試double。 – 2015-03-02 22:23:24

相關問題