2010-12-04 59 views
4

我正在研究一個應用程序,其中大部分(如果不是全部)數據的範圍都是current_organization。所以,在我的控制器,我找電話,我有這樣的事情,例如:如何通過摩卡和測試/單元正確存根Rails關聯方法?

def show 
    @user = current_organization.users.find(params[:id]) 
end 

然而,在我的控制器的測試中,我有一個很難搞清楚的正確方法(或任何方式)存根這些電話,這樣我可以測試的東西,如:

get :show, :id => 1 
assert_response :success 

這些都沒有說「AR無法找到ID = 1的organization_ID = 3用戶」或什麼的。無論我嘗試什麼,我似乎都無法解決它。

我的設置塊看起來是這樣的:

setup do 
    company = organizations(:company) # fixture 
    @controller.stubs(:current_organization).returns(company) 
    # now what do I stub, if anything? 
end 

我試圖做這樣的東西:company.stubs(:users).returns([users(:one), users(:two)])但由於AR find()調用沒有一個基本的陣列存在不起作用。

我是否應該將假用戶數組設置爲像fake_users這樣的變量,然後執行類似fake_users.stubs(:find).returns(@user)的操作?那感覺不對,但也許這是正確的方法。

我只是尋找最好的方法來處理這個問題。我使用摩卡和測試/單位,如果這很重要或有幫助。

謝謝!

回答

2

除非特別需要訪問fake_users,我覺得你可以做最簡單的事情大概是這樣的: -

company.stubs(:users => stub('users', :find => users(:one))) 

不幸的是,這種代碼是尷尬的嘲笑。您會注意到我建議的解決方案非常脆弱。

+0

謝謝,這應該適合我需要的。 – rpheath 2010-12-04 23:03:10