【118日目】【1日20分のRailsチュートリアル】【第9章】演習の3.
今日は「9.6 演習」の3.から。
9.6 演習
3.Web経由でadmin属性を変更できないことを確認してください。
リスト9.59に示したように、PATCHリクエストを updateメソッドに直接発行するテストを作成してください。
テストが正しい振る舞いをしているかどうか確信を得るために、まずはadminをuser_paramsメソッド内の許可されたパラメータ一覧に追加するところから始めてみましょう。最初のテストはREDになるはずです。
リスト9.59ベースにPATCHリクエストをupdateメソッドに直接発行するテストを追加する。
assert_not @other_user.reload.admin?
はこれでいいのか自信ない。
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", password_confirmation: "password", admin: true } assert_not @other_user.reload.admin? end
ひとまずテストが通ることは確認。
$ bundle exec rake test 42 tests, 168 assertions, 0 failures, 0 errors, 0 skips
テストが正しい振る舞いをしているかどうかを確認するために、adminをuser_paramsメソッド内の許可されたパラメータ一覧に追加してみる。
app/controllers/users_controller.rb
: def user_params params.require(:user).permit(:name, :email, :password, :password_confirmation, :admin) end :
これでテスト実行すると失敗するはず。
$ bundle exec rake test : FAIL["test_should_not_allow_the_admin_attribute_to_be_edited_via_the_web", UsersControllerTest, 2017-02-17 04:27:57 +0000] test_should_not_allow_the_admin_attribute_to_be_edited_via_the_web#UsersControllerTest (1487305677.59s) Expected true to be nil or false test/controllers/users_controller_test.rb:52:in `block in <class:UsersControllerTest>' : 42 tests, 168 assertions, 1 failures, 0 errors, 0 skips
今回追加したテストのassert_not @other_user.reload.admin?
でエラーになることを確認。@other_userのadmin属性が変更できてしまっている、ってことですね。
テストは上手く動いてるよう。
許可されたパラメータ一覧に追加したadmin属性を削除してテスト終わり。
今日の学習時間は【24分】。
次は「9.6 演習」の4.から。