在我的Rails應用程序中,我使用Devise
進行用戶身份驗證。 當用戶登錄到應用程序時,Devise
會對該用戶進行身份驗證併爲該特定用戶創建會話。Devise + RSpec + Capybara:測試用戶登錄時成功創建的新會話
我需要測試一下,當用戶登錄時,會爲該用戶創建一個會話。我怎麼做?
在我的驗收測試,如果我這樣做,
feature 'User logs in' do
scenario 'with valid email and password' do
log_in_with '[email protected]', 'password'
expect(page).to have_content('Log out')
end
def log_in_with(email, password)
visit new_user_session_path
fill_in 'Email', with: email
fill_in 'Password', with: password
click_button 'Log in'
end
end
不過我沒有檢查新的會話是爲登錄的用戶創建的。這不符合我的要求,因爲我沒有檢查是否創建了實際的用戶會話。
現在,如果我使用warden
代替:
user = FactoryGirl.create(:user)
login_as(user, :scope => :user)
...
我只是說,登錄爲某某用戶進入下一步驟如可能查了註銷鏈接或編輯個人資料的鏈接,但不檢查用戶的會話創建。
如果我這樣做在控制器的規格,在那裏我有機會獲得sign_in
和sign_out
方法:
describe Devise::SessionsController do
it "user signed in successfully" do
logged_user = User.create(:email => "[email protected]", :password => "12345678")
sign_in logged_user
expect(controller.user_session).not_to be nil
end
end
在這裏,我有機會獲得user_session
,current_user
,user_signed_in?
方法。 在這3種選擇中,我選擇了user_session
,因爲它似乎與當前用戶會話相關聯。 這是正確的方法嗎? 或者是否有其他替代方法或直接方法可用於檢查會話是處於活動狀態還是爲用戶創建的? 有沒有辦法在我的驗收測試中檢查這個場景?