2015-09-08 32 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