2016-09-28 2 views
1

Ich habe versucht, die Übung in listing 10.56 zu bestehen und testen, ob das Admin-Attribut verboten ist. Ich habe Admin-Parameter inMichael Hartl Rails 5 Tutorial Kapitel 10, Listing 10.56, testen, ob das Admin-Attribut ist verboten

app/controllers/users_controller.rb

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

auch gefüllt notwendigen Teile in

Test/controllers/users_controller_test.rb

test "should not allow the admin attribute to be edited via the web" do 
     log_in_as(@other_user) 
     assert_not @other_user.admin? 
     patch :update, id: @other_user, user: { password: "", 
               password_confirmation: "", 
               admin: true } 
     assert_not @other_user.reload.admin? 
end 

Immer noch bekomme ich unbekannte Fehler nach test:

ERROR["test_should_not_allow_the_admin_attribute_to_be_edited_via_the_web", UsersControllerTest, 3.2600422599352896] 
test_should_not_allow_the_admin_attribute_to_be_edited_via_the_web#UsersControllerTest (3.26s) 
URI::InvalidURIError:   URI::InvalidURIError: bad URI(is not URI?): http://www.example.com:80update 
      test/controllers/users_controller_test.rb:37:in `block in <class:UsersControllerTest>' 

Wer hier war mit dem gleichen Problem beschäftigt?

Antwort

3

Dieser Fehler ist beabsichtigt. Wie die Übung sagt, haben Sie zuvor :admin zu den erlaubten Parametern hinzugefügt.

Ihr Test sendet jetzt die Patch-Anfrage und setzt admin: true für @other_user (was hier möglich ist, da Sie :admin zu den erlaubten Parametern hinzugefügt haben). Danach verwenden Sie "assert_not", die den Fehler ausgelöst werden, da der Test, dass

@other_user.reload.admin? 

erwartet falsch sein, aber in Ihrem Fall wahr. Durch das Löschen von :admin von erlaubten Parametern in app/controllers/users_controller.rb wird der Test auf grün geändert.

Verwandte Themen