Closed Fendo181 closed 7 years ago
(1)
実際に編集が成功するかどうか、有効な情報を送信して確かめてみましょう。
編集前
編集後
(2) もしGravatarと紐付いていない適当なメールアドレス (foobar@example.comなど) に変更した場合、プロフィール画像はどのように表示されるでしょうか? 実際に編集フォームからメールアドレスを変更して、確認してみてましょう。
省略
(1) フレンドリーフォワーディングで、最初に渡されたURLにのみ確実に転送されていることを確認するテストを作成してみましょう。続けて、ログインを行った後、転送先のURLはデフォルト (プロフィール画面) に戻る必要もありますので、これもテストで確認してみてください。ヒント: リスト 10.29のsession[:forwarding_url]が正しい値かどうかを確認するテストを追加してみましょう。
#値を入力してeditが成功した事を確認するテスト
test 'successful edit with friendly forwarding' do
get edit_user_path(@user)
assert session[:forwarding_url]
log_in_as(@user)
assert_redirected_to edit_user_url(@user) || default
name = "Foo Bar"
email = "foo@bar.com"
patch user_path(@user), params: { 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
(2) 7.1.3で紹介したdebuggerメソッドをSessionsコントローラのnewアクションに置いてみましょう。その後、ログアウトして /users/1/edit にアクセスしてみてください (デバッガーが途中で処理を止めるはずです)。ここでコンソールに移り、session[:forwarding_url]の値が正しいかどうか確認してみましょう。また、newアクションにアクセスしたときのrequest.get?の値も確認してみましょう (デバッガーを使っていると、ときどき予期せぬ箇所でターミナルが止まったり、おかしい挙動を見せたりします。熟練の開発者になった気になって (コラム 1.1)、落ち着いて対処してみましょう)。
(byebug) session[:forwarding_url]
"http://localhost:3000/users/3/edit"
(byebug)"http://localhost:3000/login"
(byebug) request.get?
true
管理者ユーザーとしてログインし、試しにサンプルユーザを2〜3人削除してみましょう。ユーザーを削除すると、Railsサーバーのログにはどのような情報が表示されるでしょうか?
Started DELETE "/users/3" for 127.0.0.1 at 2017-07-11 17:16:51 +0900
Processing by UsersController#destroy as HTML
Parameters: {"authenticity_token"=>"DSkat+S9qTGDg5GHAEjAqKSt3bdX+MyD4YiGlWoP/7k0snbwlomQz3Msp5zaJmlWRK0pAX5WbFC3iXDio8rPCg==", "id"=>"3"}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]]
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 3], ["LIMIT", 1]]
(0.1ms) begin transaction
SQL (0.6ms) DELETE FROM "users" WHERE "users"."id" = ? [["id", 3]]
(2.5ms) commit transaction
Redirected to http://localhost:3000/users
Completed 302 Found in 9ms (ActiveRecord: 3.5ms)
演習10.0
(1)
(2)
ここに着目して、修正してみる。
<%= form_for(@user,url:signup_path) do |f| %>
<%= form_for(@user) do |f| %>