【99日目】【1日20分のRailsチュートリアル】【第9章】テスト駆動開発でプロフィール編集処理を実装する
今日は「9.1.4 TDDで編集を成功させる」から。
9.1.4 TDDで編集を成功させる
プロファイル画像の編集は、画像のアップロードをGravatarに任せてあるので、既に動作するようになっています。
Gravatarの方で画像の編集をする感じか。
今回はテスト駆動開発を使ってユーザーの編集機能を実装してみましょう。
TDDって「テスト駆動開発」のことか。そうか…覚えてなかったよ。。。
flashメッセージが空でないかどうかと、プロフィールページにリダイレクトされるかどうかをチェックします。
また、データベース内のユーザー情報が正しく変更されたかどうかも検証します。
データベース内のユーザー情報が正しく変更されたかについては、@user.reload
でデータベース内のユーザー情報を取得して情報を比較するそう。
test/integration/users_edit_test.rb
test "successful edit" do get edit_user_path(@user) assert_template 'users/edit' name = "Foo Bar" email = "foo@bar.com" patch user_path(@user), user: { name: name, email: email, password: "", password_confirmation: "" } assert_not flash.empty? assert_redirected_to @user @user.reload assert_equal name, @user.name assert_equal email, @user.email end
テストにパスする必要のある、リスト9.8のupdateアクションは、リスト9.9に示したように、createアクション (リスト8.22) の最終的なフォームとほぼ同じです。
updateアクションにflashメッセージの表示とプロフィールページのリダイレクト処理を追加。
app/controllers/users_controller.rb
def update @user = User.find(params[:id]) if @user.update_attributes(user_params) flash[:success] = "Profile updated" redirect_to @user else :
パスワードのバリデーションに対して、空だったときの例外処理を加える必要があります。
パスワードのバリデーションに空だったときの例外処理(allow_nil: true
)を追加。
app/models/user.rb
validates :password, presence: true, length: { minimum: 6 }, allow_nil: true
すべてのテストを走らせてみて、成功したかどうか確かめてみてください。
テストは通りました。
$ bundle exec rake test 31 tests, 75 assertions, 0 failures, 0 errors, 0 skips
一応ユーザーの編集も試してみよう。
サーバーを起動して
$ rails server -b $IP -p $PORT
プロフィール編集ページにアクセス。
名前とか適当に変えてみてボタンクリック。
フラッシュメッセージも表示されたしパスワード欄空でも問題なし。
ちゃんと動いてそう。
今日の学習時間は【25分】。
次は「9.2 認可」から。