演習内容
フレンドリーフォワーディングで、渡されたURLに初回のみ転送されていることを、テストを書いて確認してみましょう。次回以降のログインのときには、転送先のURLはデフォルト (プロフィール画面) に戻っている必要があります。ヒント: リスト 10.29のsession[:forwarding_url]が正しい値かどうか確認するテストを追加してみましょう。
解答
test結果① ⇨ red
ログイン前にgetでrequestしたURLが、session[:forwarding_url]と一致していればOKじゃん!と考え、以下の記載にしましたが、あえなくred
user_edit_test.rb
test "successful edit with friendly forwarding" do
get edit_user_path(@user)
# forwarding_urlが正しい値かのチェック
assert_includes session[:forwarding_url], edit_user_path(@user)
・・・
以下の結果見るとedit_user_path(@user)
はドメインなし、session[:forwarding_url]
にはドメインありの絶対パスのため一致せず。
FAIL["test_successful_edit_with_friendly_forwarding", UsersEditTest, 0.437811752000016]
test_successful_edit_with_friendly_forwarding#UsersEditTest (0.44s)
--- expected
+++ actual
@@ -1 +1 @@
-"/users/762146111/edit"
+"http://www.example.com/users/762146111/edit"
test結果② ⇨ green
上記①よりedit_user_path(@user)
の内容が、session[:forwarding_url]
に含まれている、という条件で検証すればいいのでは?と思いrails guideで条件満たすものないか探したところ、以下のassertがありました。
assert_includes( collection, obj, [msg] )
→ assert_include:objはcollectionに含まれると主張する。
というわけで以下のテストコードにしたところ、晴れてgreenとなりました。
user_edit_test.rb
test "successful edit with friendly forwarding" do
get edit_user_path(@user)
# forwarding_urlが正しい値かのチェック
assert_includes session[:forwarding_url], edit_user_path(@user)