2015-09-08 34 views
1

使用Rails教程和第8章我无法通过我的测试之一。已经检查了几个小时...任何帮助将不胜感激。Rails教程8.2:登录注销

ERROR["test_login_with_valid_information", UsersLoginTest, 2015-09-07  00:25:37 -0700] 
test_login_with_valid_information#UsersLoginTest (1441610737.31s) 
BCrypt::Errors::InvalidHash:   
BCrypt::Errors::InvalidHash: invalid hash 
    app/controllers/sessions_controller.rb:8:in `create' 
    test/integration/users_login_test.rb:22:in `block in <class:UsersLoginTest>' 
    app/controllers/sessions_controller.rb:8:in `create' 
    test/integration/users_login_test.rb:22:in `block in <class:UsersLoginTest>' 

22/22: [============] 100% Time: 00:00:00, Time: 00:00:00 

Finished in 0.46288s 
22 tests, 44 assertions, 0 failures, 1 errors, 0 skips  

users_login_test.rb

require 'test_helper' 

class UsersLoginTest < ActionDispatch::IntegrationTest 

    def setup 
    @user = users(:michael) 
    end 

    test "login with invalid information" do 
    get login_path 
    assert_template 'sessions/new' 
    post login_path, session: { email: "", password: "" } 
    assert_template 'sessions/new' 
    assert_not flash.empty? 
    get root_path 
    assert flash.empty? 
    end 

    test "login with valid information" do 
    get login_path 
    post login_path, session: { email: @user.email, password: 'password' } 
    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) 
    end 
end 

sessions_controller.rb

class SessionsController < ApplicationController 

    def new 
    end 

    def create 
    user = User.find_by(email: params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 
     log_in user 
     redirect_to user 
    else 
     flash.now[:danger] = 'Invalid email/password combination' 
     render 'new' 
    end 
    end 

    def destroy 
    end 
end 

回答

-1

亲爱@Travislogan:由于在轨道上的Ruby教程本身是自我解释在最可能的方式,在进入8.2节之前,您可能已经错过了一些步骤/代码。因此,请至少将上一章中的所有测试和项目代码交叉检查至当前一个,再多一次。它将帮助您找出代码中的错误。

+0

谢谢@PraveenGeorge,我已经多次通过我的分支与教程一步一步,并找不到问题。在发布之前,我做了这件事,我希望有人可能会抓到一些东西,而无需我重新开始本章。但唉... – travislogan

+0

@travislogan:确定它有时很难找出哪里出了问题,所以我建议你切换回所有工作正常的最后一个分支,并再次开始使用代码工作,并从那里再次测试,这有时可以帮助你。 –

0

@PraveenGeorge是正确的 - 您需要至少从上次测试通过以后回溯并检查您的代码。基于你分享的两个文件的内容与本教程相匹配的事实,问题在于其他地方(并且不幸的是,在我们的视野之外)。

也许它在user.rb中def User.digest(string)或sessions_helper.rb中?

1

我知道这是自最初发布一段时间,但我有完全相同的错误,并在 users.yml里我的问题是(缺=)一个错字

michael: 
    name: Michael Example 
    email: [email protected] 
    password_digest: <% User.digest('password') %> 

,它应该已经

michael: 
name: Michael Example 
email: [email protected] 
password_digest: <%= User.digest('password') %> 
+0

谢谢!那正是我的问题,你救了我20分钟的分流。 – pmeyer