2012-12-29 36 views
4

我使用RSpec測試視圖(2.12在Rails 3.2.8上)。我正在使用CanCan來有條件地在頁面上顯示某些元素。這需要一個控制器方法'current_user'。在我的一些規範中,我已經能夠將current_user截斷,例如。 controller.stub(:current_user).and_return(etc) 或 view.stub.etc。rspec查看存根(stubs and partials)

這適用於我的一些規格。但是我有一對夫婦不工作,我不明白爲什麼。

兩個不工作的規範測試一個視圖,該視圖調用了局部視圖,並且在局部視圖中訪問'current_user'作爲方法。錯誤是

undefined local variable or method `current_user' 

所以我想我的問題是如何正確存根方法,使他們可以訪問部分內。

應該怎麼做?

回答

9

控制器存根無法正常工作,因爲您未測試控制器,您正在測試視圖。只需使用而不是一個視圖存根:

view.stub(:current_user).and_return(etc) 

這應部分,以及在一個視圖中工作。

參見:passing view spec that stubs a helper method

+0

這是我想的第一件事情,但它沒有工作,所以我嘗試controller.stub並沒有任何工作。所以現在我很困惑。我可以讓view.stub(等)工作,當且僅當它是一個正在測試的單層視圖。如果視圖調用partial,則方法在partial中不可用。 –

+2

啊!我解決了這個問題,我需要同時擁有view.stub(:current_user)和controller.stub(:current_user)。在視圖中任何對current_user的引用,都會轉到view.stub,並且對CanCan能力類中的current_user的任何引用都會傳遞給controller.stub –