2016-09-28 4 views
1

私はlisting 10.56で演習に合格し、admin属性が禁止されているかどうかテストしていました。 IはMichael Hartl's Rails 5チュートリアルの第10章10.56を参照し、admin属性が禁止されているかどうかをテストします。

テスト/コントローラ/ 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 
に必要な部品を充填し、また

アプリ/コントローラ/ users_controller.rb

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

に管理パラメータを追加

まだ、不明なエラーが表示されていますテスト後:

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>' 

誰もが同じ問題を扱っていましたか?

答えて

3

このエラーは、意図されています。エクササイズでは、許可されたパラメータに:adminを追加しています。

あなたのテストでは、パッチのリクエストが送信され、@other_userにはadmin: trueが設定されます(これは可能なパラメータに:adminを追加したためです)。テストは

@other_user.reload.admin? 

はその真偽しかし、あなたのケースになることを期待するので、その後、あなたは、エラーが発生します"assert_not"を使用しています。 app/controllers/users_controller.rbの許可されたパラメータから:adminを削除すると、テストが緑色に変わります。

関連する問題