2017-10-24 1 views
0

Durch Hartls Tutorial gehen und haben nach einer Antwort gesucht, aber keine gefunden. (Möglicherweise gibt es bereits existierende Antworten, aber da die Kapitel in den neueren Ausgaben aktualisiert und umgestellt wurden, kann ich sie nicht finden, wenn sie existieren.)Michael Hartls Tutorial Kapitel 10.2.2, Listing 10.26 Tests fehlgeschlagen

Ich bin in Abschnitt 10.2.2. Listing 10.26 macht den Rails-Test.

hier ist der Fehler für meine Tests:

ERROR["test_should_redirect_edit_when_logged_in_as_wrong_user", UsersControllerTest, 1.5802158990409225] 
test_should_redirect_edit_when_logged_in_as_wrong_user#UsersControllerTest (1.58s) 
BCrypt::Errors::InvalidHash:   BCrypt::Errors::InvalidHash: invalid hash 
      app/controllers/sessions_controller.rb:9:in `create' 
      test/test_helper.rb:32:in `log_in_as' 
      test/controllers/users_controller_test.rb:29:in `block in <class:UsersControllerTest>' 

ERROR["test_should_redirect_update_when_logged_in_as_wrong_user", UsersControllerTest, 1.606778411893174] 
test_should_redirect_update_when_logged_in_as_wrong_user#UsersControllerTest (1.61s) 
BCrypt::Errors::InvalidHash:   BCrypt::Errors::InvalidHash: invalid hash 
      app/controllers/sessions_controller.rb:9:in `create' 
      test/test_helper.rb:32:in `log_in_as' 
      test/controllers/users_controller_test.rb:36:in `block in <class:UsersControllerTest>' 

    35/35: [=====================================================] 100% Time: 00:00:01, Time: 00:00:01 

Finished in 1.71823s 
35 tests, 87 assertions, 0 failures, 2 errors, 0 skips 

Test/Einrichtung/users.yml

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

archer: 
    name: Sterling Archer 
    email: [email protected] 
    password_digest: <%= User.digest('password') % 

Test/controllers/users_controller_test.rb

require 'test_helper' 

class UsersControllerTest < ActionDispatch::IntegrationTest 

    def setup 
    @user = users(:michael) 
    @other_user = users(:archer) 
    end 

    test "should get new" do 
    get signup_path 
    assert_response :success 
    end 

test "should redirect edit when not logged in" do 
    get edit_user_path(@user) 
    assert_not flash.empty? 
    assert_redirected_to login_url 
    end 

    test "should redirect update when not logged in" do 
    patch user_path(@user), params: { user: { name: @user.name, 
               email: @user.email } } 
    assert_not flash.empty? 
    assert_redirected_to login_url 
    end 

    test "should redirect edit when logged in as wrong user" do 
    log_in_as(@other_user) 
    get edit_user_path(@user) 
    assert flash.empty? 
    assert_redirected_to root_url 
    end 

    test "should redirect update when logged in as wrong user" do 
    log_in_as(@other_user) 
    patch user_path(@user), params: { user: { name: @user.name, 
               email: @user.email } } 
    assert flash.empty? 
    assert_redirected_to root_url 
    end 

end 

app/controllers /users_controller.rb

class UsersController < ApplicationController 

    before_action :logged_in_user, only: [:edit, :update] 
    before_action :correct_user, only: [:edit, :update] 

    def show 
    @user = User.find(params[:id]) 

    end 

    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(user_params) 
    # @user = User.new(params[:user]) # Not the final implementation! 
    if @user.save 
     log_in @user 
     flash[:success] = "Welcome to the Sample App!" 
     redirect_to @user 
     # Handle a successful save. 
    else 
     render 'new' 
    end 
    end 

    def edit 
    # can take out because already in correct_user  @user = User.find(params[:id]) 
    end 

    def update 
    # can take out because already in correct_user @user = User.find(params[:id]) 
    if @user.update_attributes(user_params) 
     # Handle a successful update. 
     flash[:success] = "Profile updated" 
     redirect_to @user 

    else 
     render 'edit' 
    end 
    end 

    private 

    def user_params 
     params.require(:user).permit(:name, :email, :password, 
            :password_confirmation) 
    end 

    # Before filters 

    # Confirms a logged-in user. 
    def logged_in_user 
     unless logged_in? 
     flash[:danger] = "Please log in." 
     redirect_to login_url 
     end 
    end 

     # Confirms the correct user. 
    def correct_user 
     @user = User.find(params[:id]) 
     redirect_to(root_url) unless @user == current_user 
    end 

end 

Warum bekomme ich 2 fehlgeschlagene Tests, wenn das Buch sagt, dass alle Tests bestehen sollten? Ich habe mir die Zeilen angesehen, die die Fehlermeldung erwähnt, aber ich bin mir nicht sicher, was falsch ist. Danke für die Hilfe.

EDIT: Sessions Controller

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 
    params[:session][:remember_me] == '1' ? remember(@user) : forget(@user) 
    redirect_to @user 

    else 
    flash.now[:danger] = 'Invalid email/password combination' # Not quite right! 
    render 'new' 
    end 
    end 

    def destroy 
    log_out if logged_in? 
    redirect_to root_url 
    end 
end 

Antwort

1

Sie fehlen eine schließende Klammer in der password_digest für die "Sterling Archer" Testvorrichtung.

password_digest: <%= User.digest('password') % 

sollte

password_digest: <%= User.digest('password') %> 
+0

oh Mann! Gut beobachtet. war tagelang dran. Danke. – Owen

0

Blick aufmerksamer auf Linie:

BCrypt::Errors::InvalidHash: invalid hash 
      app/controllers/sessions_controller.rb:9:in `create' 

Sie haben nicht den Code für diesen Controller angeben, und ich kann Ihnen nicht sagen, was falsch sein könnte.

+0

sorry, ja bearbeitet jetzt Sitzungen Controller enthalten, aber ich habe nicht noch verstehen, was mit dieser Zeile falsch ist – Owen

+0

@Owen jede Datei zu überprüfen, die in der Spur angegeben ist, bis Sie finden einen Fehler. Nächste Zeile ist: test/test_helper.rb: 32: in 'log_in_as ' – LazyNick7

+0

das ist mein Problem, ich sehe keine Fehler. Der gesamte Code wird aus dem Buch kopiert. – Owen

Verwandte Themen