ぞえの技術めも

Ruby on Rails勉強中

【99日目】【1日20分のRailsチュートリアル】【第9章】テスト駆動開発でプロフィール編集処理を実装する

Ruby on Railsチュートリアル(第3版)

今日は「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

プロフィール編集ページにアクセス。

名前とか適当に変えてみてボタンクリック。

f:id:kt_zoe:20170123123826p:plain

フラッシュメッセージも表示されたしパスワード欄空でも問題なし。
ちゃんと動いてそう。

今日の学習時間は【25分】

次は「9.2 認可」から。