ぞえの技術めも

Ruby on Rails勉強中

【118日目】【1日20分のRailsチュートリアル】【第9章】演習の3.

Ruby on Railsチュートリアル(第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.から。