2011-09-23 199 views
0

我試圖運行這樣的測試:從控制器Rspec的控制器測試失敗

it "render form to update an bundle with a specific id" do 
    bundle = mock_model(Bundle) 
    Bundle.stub!(:find).with("1") { bundle } 

    get :edit, :locale => "en", :id => 1 
    Bundle.should_receive(:find).with("1").and_return(bundle) 
end 

代碼:

class BundlesController < ApplicationController 
    # GET /bundles 
    # GET /bundles.json 
    ..... 

    # GET /bundles/1/edit 
    def edit 
    @bundle = Bundle.find(params[:id]) 
    end 
    ..... 
end 

但測試失敗消息:

BundlesController捆綁更新的形式呈現使用特定ID更新捆綁軟件 失敗/錯誤:Bundle.should_receive(:find).with(「1」)。and_return(bundle) ().find(「1」) 預期:1周時間 好評:0次 #./spec/controllers/bundles_controller_spec.rb:60:in`塊(3級)的「

誰能幫助我? 謝謝!

+0

我們沒有證據表明控制器實際上有一個編輯操作,或者編輯操作調用了'Bundle.find'。請給我們更多的代碼。 –

+0

我的猜測是:用一個字符串'「1」代替整數'1':':id =>「1」'。 – rdvdijk

回答

2

這裏有幾個問題,也許更多的是因爲你發佈了更多的代碼。

首先,您要在Bundle上設置存根和期望值,然後向我們顯示加載Role的代碼。

其次,您在測試結束時調用#should_receive。此方法設置了測試中的代碼的期望值。除非你有一些隱藏的回調,你沒有向我們展示,否則這總是會失敗。反轉訂單。

Bundle.should_receive(:find).with("1").and_return(bundle) 
get :edit, :locale => "en", :id => 1