test_helper.rb
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
class ActiveSupport::TestCase
fixtures :all
#如果用戶已經登錄,返回 true
def is_logged_in?
!session[:user_id].nil?
end
#登錄指定的用戶
def log_in_as(user)
session[:user_id] = user.id
end
end
#登錄指定的用戶
class ActionDispatch::InterationTest
def log_in_as(user, password: '123456', remember_me: '0')
post login_path, params: { session: { email: user.email,
password: password,
remember_me: remember_me } }
end
end
users_login_test.rb
require 'test_helper'
class UsersLoginTest < ActionDispatch::IntegrationTest
def setup
@user = users(:green)
end
test "login with valid information followed by logout" do
get login_path
post login_path, params: { session: { email: @user.email,
password: 'password' } }
assert is_logged_in?
assert_redirected_to @user
follow_redirect!
assert_template 'users/show'
assert_select "a[href=?]", login_path, count: 0
assert_select "a[href=?]", logout_path
assert_select "a[href=?]", user_path(@user)
delete logout_path
assert_not is_logged_in?
assert_redirected_to root_url
#模擬用戶在另一個窗口中點擊退出鏈接
delete logout_path
follow_redirect!
assert_select "a[href=?]",login_path
assert_select "a[href=?]",logout_path, count: 0
assert_select "a[href=?]",user_path(@user), count: 0
end
test "login with remembering" do
log_in_as(@user, remember_me: '1')
assert_not_empty cookies['remember_token']
end
test "login without remembering" do
#登錄, 設定 cookie
log_in_as(@user, remember_me: '1')
delete logout_path
#再次登錄, 確認 cookie 被刪除了
log_in_as(@user, remember_me: '0')
assert_empty cookies['remember_token']
end
end