2011-08-12 31 views
2

我有一個調用current_user.eligible_for_reward的幫助方法?我想將這個電話存儲在水豚驗收規範中。在我的模型我有一個佔位符虛擬方法:如何在Capybara驗收測試中存根控制器/ current_user方法

User.rb 

def eligible_for_reward? 
    "blah" 
end 

這是我到目前爲止已經試過:

  1. 我試着磕碰CURRENT_USER,但結果是「修改凍結對象」錯誤因爲管制員是零。我相信只有使用RSpec的get而不是訪問some_path才能設置控制器。我需要堅持訪問some_path,我相信,否則我的page.should ...都失敗,因爲頁面沒有設置。

  2. 我嘗試以用戶身份登錄(login_as(用戶),它通過註冊/登錄成功運行),然後stubbing user.eligible_for_reward ?,但這似乎不工作,因爲我仍然回到測試「等等」

有沒有一種很好的方法來將這種方法存根?

回答

7

接受規範中的存根並不是一個好主意。如果沒有別的辦法,那麼你可以這樣做:

User.any_instance.stub!(:eligible_for_reward?).and_return(true) 

只要記住,磕碰/驗收規範嘲諷的事情意味着你真的沒有測試任何東西。

+0

我採取了不同的方法。同意stubbing不是這裏最好的。謝謝。 –

+1

請注意,完整的集成測試並不是水豚的唯一用途。在Test :: Unit,RSpec或MiniTest中使用Capybara/Selenium測試Javascript功能是完全合理的,並且可以在Rails中完成其他任何可能的工作,以儘可能快地運行。另外,當設計出來時,我更喜歡它更徹底,而存根:authenticate_user!什麼都不做,並且存根控制器的#current_user返回假用戶實例。這樣,Devise完全不在圖片中。 –

+1

請注意'stub!'應該替換爲'stub'。 'stub!'是該方法的一箇舊的,不恰當的別名。請參閱[此電子郵件]的最後三段(http://www.mail-archive.com/[email protected]/msg13270.html)。 – skalee

相關問題