测试失败:预期响应为 <redirect>,但为 <200>
Test failure: Expected response to be a <redirect>, but was <200>
我是 rails 的新手,开始设置我的第一个测试套件。
在我的测试中,我不断遇到以下故障:
Expected response to be a <redirect>, but was <200>
此响应很奇怪,因为在使用浏览器进行测试时重定向显然有效。有谁知道这里会发生什么,或者诊断此类问题的最佳方法是什么。比如有没有办法查到200消息是在哪个页面给出的
测试脚本(user_controller_test.rb)
test "when correct should redirect to dashboard" do
log_in_as(@user_one)
assert_redirected_to dashboard_url
end
完整的控制台消息
FAIL["test_should_get_dashboard_when_correct_user", UsersControllerTest, 2015-12-23 18:06:20 +1100]
test_should_get_dashboard_when_correct_user#UsersControllerTest (1450854380.57s)
Expected response to be a <redirect>, but was <200>
test/controllers/users_controller_test.rb:27:in `block in <class:UsersControllerTest>'
控制器:
class SessionsController < ApplicationController
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in user
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
redirect_back_or dashboard
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
你的测试有误。
控制器中的代码是这样的:
if user && user.authenticate(params[:session][:password])
redirect_back_or dashboard
else
render 'new'
end
# if user is not nil AND user can authenticate with given params
# success (redirect)
# else the params passed to the controller did not authenticate the user
# fail (render 200)
然后你的测试说:
log_in_as(@user_one)
assert_redirected_to dashboard_url
# login user manually, rather than assign params
# check if the controller action redirected, meaning check if it could authenticate with the given params that you did not assign
看到问题了吗?如果您希望它通过 if
语句,您需要设置控制器操作正在检查的参数。
我是 rails 的新手,开始设置我的第一个测试套件。
在我的测试中,我不断遇到以下故障:
Expected response to be a <redirect>, but was <200>
此响应很奇怪,因为在使用浏览器进行测试时重定向显然有效。有谁知道这里会发生什么,或者诊断此类问题的最佳方法是什么。比如有没有办法查到200消息是在哪个页面给出的
测试脚本(user_controller_test.rb)
test "when correct should redirect to dashboard" do
log_in_as(@user_one)
assert_redirected_to dashboard_url
end
完整的控制台消息
FAIL["test_should_get_dashboard_when_correct_user", UsersControllerTest, 2015-12-23 18:06:20 +1100]
test_should_get_dashboard_when_correct_user#UsersControllerTest (1450854380.57s)
Expected response to be a <redirect>, but was <200>
test/controllers/users_controller_test.rb:27:in `block in <class:UsersControllerTest>'
控制器:
class SessionsController < ApplicationController
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in user
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
redirect_back_or dashboard
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
你的测试有误。
控制器中的代码是这样的:
if user && user.authenticate(params[:session][:password])
redirect_back_or dashboard
else
render 'new'
end
# if user is not nil AND user can authenticate with given params
# success (redirect)
# else the params passed to the controller did not authenticate the user
# fail (render 200)
然后你的测试说:
log_in_as(@user_one)
assert_redirected_to dashboard_url
# login user manually, rather than assign params
# check if the controller action redirected, meaning check if it could authenticate with the given params that you did not assign
看到问题了吗?如果您希望它通过 if
语句,您需要设置控制器操作正在检查的参数。