2010-12-13 81 views
1

我正在將一個方法從一個控制器移到一個幫助器中;該方法現在將從視圖中調用。此前,在我的控制器我有如何添加一個輔助方法將被調用的摩卡期望?

def show 
    @things = gather_things 
end 

,在我的功能測試我有

test "show assigns things" do 
    get :show 
    assert_equal GATHERED_THINGS, assigns(:things) 
end 

現在,gather_things生活的助手,並從視圖中調用。我有一個幫助器的單元測試,它確保它返回正確的值,但我希望我的功能測試能夠斷言它會被調用。我試過

test "show calls gather_things" do 
    @controller.expects(:gather_things) 
    get :show 
end 

但這並不起作用。我應該打電話expects(:gather_things)

回答

1

如果您已將代碼從控制器移出到視圖中,那麼它實際上已移出功能測試的範圍。

我不知道正確的課程是否符合您的期望......但您可以通過在「gather_things」方法中進行如下操作:logger.error self.class.name - 將類名放入登錄你。然後你可以把你的期望放到那個班上。

現在我們來看問題的關鍵......你應該將代碼移到視圖中嗎?

我的意見是,你不應該。設置模型對象的聚集恰恰是控制器代碼中的內容 - 如果您稍後決定要在CSV文件中顯示相同的數據,還是以RESTful XML API的形式顯示該內容? - 無論使用什麼視圖,您仍然需要實例化相同的一組對象。因此,我的最終建議是將該方法再次移回到控制器所屬的位置。

編輯:下面是現在已經過時的建議和該用戶不相關,但可能是別人

如果您正在使用RSpec的測試 - 它doesn't actually render the views during a functional test(除非您特別交換機上),並因此被稱爲任意代碼表單視圖將不會執行。

如果你想測試視圖調用的東西,你需要打開它,或者在視圖測試中測試它。

+0

我們使用Test :: Unit和friends而不是spec。 – Simon 2012-08-21 08:48:26

+0

好吧,我已經添加了一個方法來找出它被調用的類。出於所述的原因,我仍然建議將呼叫移回控制器。 – 2012-08-22 00:54:18

相關問題