2012-05-18 22 views
3

我正在嘗試在過濾器之前編寫RSpec以記錄用戶。我有一個產品控制器。爲了查看產品,用戶必須登錄我添加的登錄方法符合規格像這樣/支持/實用程序:如何在使用RSpec時簽署用戶

def login(user) 
    post login_path, email: user.email, password: "password" 
end 

然後我稱爲在該方法中我的規格/控制器/產品過濾器前測試:

before :each do 
    user = FactoryGirl.create(:user) 
    login(user) 
end 

當我運行測試,我得到以下錯誤:

The action '/login' could not be found for ProductsController 

我有一個路線/login和我的用戶身份驗證很簡單 - 就像Railscasts #250 Authentication from Scratch。我錯過了什麼?

+0

'/ login'的路由是什麼樣的? – x1a4

+0

'get'/ login',to:'sessions#new',as:'login'' – Scott

+0

我將它切換到'get login_path',但我仍然得到相同的錯誤: ''/'沒有找到KasesController' – Scott

回答

3

如果這是一個控制器規格,那麼問題是當單元測試控制器時路由不可用。關鍵是要單獨測試,這意味着沒有路線

+0

那麼如何模擬用戶登錄來測試產品控制器呢?產品只能由登錄用戶創建,查看,編輯等。你會在這種情況下只做集成/請求測試嗎? – Scott

+0

在集成測試中,您之前只是通過視圖和登錄進行集成測試。對於控制器測試,我不能100%確定如何處理自制驗證身份驗證。 Devise有一個幫助你的方法。 – DVG

1

登錄正在調用ProductsController,它沒有登錄方法。正如其他人告訴你的,當你測試另一個控制器時,我不會調用一個控制器。因此,我認爲你應該以其他方式登錄。例如:

def login(user) 
    session[:user_id] = user.id 
end 
+0

我的意思是我會用spec/support/utilities替換你的登錄方法。我希望它能起作用。 – Gawyn