测试"清单8.20:用户使用有效信息登录的测试"给我一个持久的错误信息:
FAIL["test_login_with_valid_information", UsersLoginTest, 1.051300315]
test_login_with_valid_information#UsersLoginTest (1.05s)
Expected response to be a <redirect>, but was <200>
test/integration/users_login_test.rb:22:in `block in <class:UsersLoginTest>'
测试是:
19 test "login with valid information" do
20 get login_path
21 post login_path, session: { email: @user.email, password: 'password' }
22 assert_redirected_to @user
23 follow_redirect!
24 assert_template 'users/show'
25 ....
Sessions控制器是我想象的导致此错误消息
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in user
redirect_to user # What I want to happen
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new' # What is happening
end
end
如果用户已通过身份验证,则应重定向到用户个人资料页面 否则登录表单将呈现
所以我认为问题是我的测试用户没有经过身份验证。当我在网站上手动登录时,应用程序登录和重定向功能就好了。
test / fixtures / users.yml 此密码传递密码&#39;
password_digest: <%= User.digest('password') %>
并且用户模型使用此功能来消化密码&#39;密码&#39;
def User.digest(string)
cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
BCrypt::Engine.cost
BCrypt::Password.create(string, cost: cost)
end
问题出在哪里?还有更多我如何进行另一项测试,向我展示为什么这项测试失败?
答案 0 :(得分:1)
如果我正在阅读这个问题,我会遇到类似(相同)的问题,并且为了清楚了解未来的浏览器,我将添加以下内容:由于Shonin指出该问题与控制器采用包含电子邮件地址的问题有关显然在users.yml代码中
michael:
name: Michael Example
email: Michael@example.com
password_digest: <%= User.digest('password') %>
时不会过去
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>
会通过。
答案 1 :(得分:0)
解决。