【98日目】【1日20分のRailsチュートリアル】【第9章】ユーザー情報の編集に失敗したときの処理とテストを作成
今日は「9.1.2 編集の失敗」から。
9.1.2 編集の失敗
本項では、7.3のユーザー登録に失敗したときと似た方法で、編集に失敗した場合について扱っていきます。
まずUsersコントローラーにupdateアクションを追加する。
app/controllers/users_controller.rb
def update @user = User.find(params[:id]) if @user.update_attributes(user_params) # 更新に成功したときの処理 else render 'edit' end end
Userモデルのバリデーションとエラーメッセージのパーシャルが既にあるので (リスト9.2)、無効な情報を送信すると役立つエラーメッセージが表示されるようになっています (図9.3)。
サーバーを起動して
$ rails server -b $IP -p $PORT
パスワード空のまま「Save changes」ボタン押してみる。
エラーメッセージが表示されることを確認。
9.1.3 編集失敗時のテスト
コマンドで統合テストを生成する。
$ rails generate integration_test users_edit invoke test_unit create test/integration/users_edit_test.rb
最初は編集失敗時の簡単なテストを追加します (リスト9.6)。
無効な情報を送信してみて、editビューが更新されるかを見るテスト。
test/integration/users_edit_test.rb
require 'test_helper' class UsersEditTest < ActionDispatch::IntegrationTest def setup @user = users(:michael) end test "unsuccessful edit" do get edit_user_path(@user) assert_template 'users/edit' patch user_path(@user), user: { name: "", email: "foo@invalid", password: "foo", password_confirmation: "bar" } assert_template 'users/edit' end end
現時点ではテスト通ります。
$ bundle exec rake test 30 tests, 69 assertions, 0 failures, 0 errors, 0 skips
今日の学習時間は【20分】。
次は「9.1.4 TDDで編集を成功させる」から。
TDDってなんだ。