0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails チュートリアル 5.0(第4版)演習と解答(10.2.1)

Posted at

演習内容

フレンドリーフォワーディングで、渡された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)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?