【103日目】【1日20分のRailsチュートリアル】【第9章】ユーザーフレンドリーな機能のテストを追加する
今日は「9.2.2 正しいユーザーを要求する」のリファクタリングから。
9.2.2 正しいユーザーを要求する
最後に、リファクタリングではありますが、一般的な慣習に倣ってcurrent_user?という論理値を返すメソッドを実装します。
あるユーザーが今ログインしているユーザーかどうかチェックするメソッドを実装する。
app/helpers/sessions_helper.rb
# 与えられたユーザーがログイン済みユーザーであればtrueを返す def current_user?(user) user == current_user end
@user == current_user
をcurrent_user?
で置き換えることでちょっと分かりやすいコードに。
app/controllers/users_controller.rb
# 正しいユーザーかどうか確認 def correct_user @user = User.find(params[:id]) redirect_to(root_url) unless current_user?(@user) end
9.2.3 フレンドリーフォワーディング
(省略)後1つ小さなキズがあります。保護されたページにアクセスしようとすると、問答無用で自分のプロファイルページに移動させられてしまいます。
アクセスしようとしてたページに移動して欲しいよね。
実際のテストはまず編集ページにアクセスし、ログインした後に、(デフォルトのプロフィールページではなく) 編集ページにリダイレクトされているかどうかをチェックするといったテストです。
編集ページへのアクセスについてテストを下記のように修正。
test/integration/users_edit_test.rb
: test "successful edit with friendly forwarding" do get edit_user_path(@user) log_in_as(@user) assert_redirected_to edit_user_path(@user) 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 end
(なお、リダイレクトによってedit用のテンプレートが描画されなくなったので、リスト9.26では該当するテストを削除しています)
テスト内のこのコードのことかな。
assert_template 'users/edit'
まだアクセスしようとしてたページにリダイレクトする処理は実装してないのでこの段階ではテストは失敗します。
$ bundle exec rake test 35 tests, 79 assertions, 1 failures, 0 errors, 0 skips
項の途中だけど今日はここまで。
今日の学習時間は【21分】。
次は「9.2.3 フレンドリーフォワーディング」の処理を実装するところから。