如何在更改 /members URL 后修复 rails 集成 users_login_test.rb 测试?
How to fix rails integration users_login_test.rb test after changing /members URL?
我一直在修改我根据 Rails 教程书构建的网站,并且我已经更新了测试套件以匹配我的所有更改,但我对如何重写此测试感到困惑。
登录的URL是/
,我改成了/members
require 'test_helper'
class UsersLoginTest < ActionDispatch::IntegrationTest
def setup
@user = users(:michael)
end
test "login with valid information followed by logout" do
get login_path
post login_path, 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
# Simulate a user clicking logout in a second window.
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_nil cookies['remember_token']
end
test "login without remembering" do
log_in_as(@user, remember_me: '0')
assert_nil cookies['remember_token']
end
end
返回的错误是:
FAIL["test_login_with_valid_information_followed_by_logout", UsersLoginTest, 2015-06-18 19:42:46 +0800]
test_login_with_valid_information_followed_by_logout#UsersLoginTest (1434627766.77s)
Expected response to be a redirect to <http://www.example.com/users/762146111> but was a redirect to <http://www.example.com/members>.
Expected "http://www.example.com/users/762146111" to be === "http://www.example.com/members".
test/integration/users_login_test.rb:13:in `block in <class:UsersLoginTest>'
编辑
路线:
Rails.application.routes.draw do
get 'members' => 'members#index'
get 'covers/new_cover' => 'covers#new_cover', :as => :new_cover
get 'covers/home'
get 'covers/new'
get 'covers/create'
get 'covers/destroy'
get 'password_resets/new'
get 'password_resets/edit'
get 'account_activations/edit'
get 'sessions/new'
root 'covers#home'
get 'profile' => 'static_pages#profile'
get 'tours' => 'static_pages#tours'
get 'blog' => 'static_pages#blog'
get 'reviews' => 'static_pages#reviews'
get 'contact' => 'static_pages#contact'
get 'signup' => 'users#new'
get 'login' => 'sessions#new'
post 'login' => 'sessions#create'
delete 'logout' => 'sessions#destroy'
resources :users do
member do
get :following, :followers
end
end
resources :account_activations, only: [:edit]
resources :password_resets, only: [:new, :create, :edit, :update]
resources :members, only: [:create, :destroy]
resources :microposts, only: [:create, :destroy]
resources :relationships, only: [:create, :destroy]
resources :covers, only: [:home, :index, :new, :create, :destroy]
end
将 assert_redirected_to @user
更改为 assert_redirected_to members_path
以确认用户在成功登录后被重定向到 /members。
然后您需要更新 follow_redirect!
之后的四行以断言成员模板(members/index 根据您的路由)出现并确认页面内容。
我一直在修改我根据 Rails 教程书构建的网站,并且我已经更新了测试套件以匹配我的所有更改,但我对如何重写此测试感到困惑。
登录的URL是/
,我改成了/members
require 'test_helper'
class UsersLoginTest < ActionDispatch::IntegrationTest
def setup
@user = users(:michael)
end
test "login with valid information followed by logout" do
get login_path
post login_path, 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
# Simulate a user clicking logout in a second window.
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_nil cookies['remember_token']
end
test "login without remembering" do
log_in_as(@user, remember_me: '0')
assert_nil cookies['remember_token']
end
end
返回的错误是:
FAIL["test_login_with_valid_information_followed_by_logout", UsersLoginTest, 2015-06-18 19:42:46 +0800]
test_login_with_valid_information_followed_by_logout#UsersLoginTest (1434627766.77s)
Expected response to be a redirect to <http://www.example.com/users/762146111> but was a redirect to <http://www.example.com/members>.
Expected "http://www.example.com/users/762146111" to be === "http://www.example.com/members".
test/integration/users_login_test.rb:13:in `block in <class:UsersLoginTest>'
编辑
路线:
Rails.application.routes.draw do
get 'members' => 'members#index'
get 'covers/new_cover' => 'covers#new_cover', :as => :new_cover
get 'covers/home'
get 'covers/new'
get 'covers/create'
get 'covers/destroy'
get 'password_resets/new'
get 'password_resets/edit'
get 'account_activations/edit'
get 'sessions/new'
root 'covers#home'
get 'profile' => 'static_pages#profile'
get 'tours' => 'static_pages#tours'
get 'blog' => 'static_pages#blog'
get 'reviews' => 'static_pages#reviews'
get 'contact' => 'static_pages#contact'
get 'signup' => 'users#new'
get 'login' => 'sessions#new'
post 'login' => 'sessions#create'
delete 'logout' => 'sessions#destroy'
resources :users do
member do
get :following, :followers
end
end
resources :account_activations, only: [:edit]
resources :password_resets, only: [:new, :create, :edit, :update]
resources :members, only: [:create, :destroy]
resources :microposts, only: [:create, :destroy]
resources :relationships, only: [:create, :destroy]
resources :covers, only: [:home, :index, :new, :create, :destroy]
end
将 assert_redirected_to @user
更改为 assert_redirected_to members_path
以确认用户在成功登录后被重定向到 /members。
然后您需要更新 follow_redirect!
之后的四行以断言成员模板(members/index 根据您的路由)出现并确认页面内容。