Rails tutorial 11.2.3や12.2.2の演習でCGI.escapeを削除するとテスト結果がredであることを確認するとありますが、greenのままとなります。
CGI.escapeは文字列を暗号化するためのメソッドであると認識していますが、これがgreenのままだとどのような問題があるのかよくわかりません。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答1件
0
ベストアンサー
演習でCGI.escapeを削除するとテスト結果がredであることを確認するとありますが、greenのまま
ですが、11.2.3 送信メールのテスト - Ruby on Rails チュートリアルの演習で記述されている「CGI.escapeの部分を削除する」とは、
assert_match CGI.escape(user.email), mail.body.encoded
の部分を「CGI.escape
の呼び出しを削除して、assert_match user.email, mail.body.encoded
のように修正する」と言う意味ではないでしょうか。これだとassert_match
は失敗し、演習の答え通りREDになるはずです。
CGI.escapeは文字列を暗号化するためのメソッドであると認識していますが、これがgreenのままだとどのような問題があるのかよくわかりません。
言葉の使い方だけの問題ですが、CGI.escape
は暗号化をするものではありません。暗号化とは、簡単に書くと「ある者しか知らないキーやルールを用いて、そのキーやルールを知らない者以外はデータを復元できないようにする。」ことです。(逆は「復号化」です)CGI.escape
は、CGIと言うインターフェース仕様に適合するようにCGIの仕様に沿って文字列を変換するだけなので、暗号化とは言いません。Rubyでも例えば2重引用符"
を文字列中に含める場合、\"
にエスケープする、などと言いますよね。そんな用法のCGI版だと思えば良いです。
では「greenのままだとどのような問題があるのか。」ですが、この場合は「チュートリアルの手順を正しく進めていない。その時点で理解すべきことが欠けているかもしれない。」ことを示します。まず、CGI.escape
は引数の文字列をCGI用にエスケープした文字列を返します。チュートリアルのコードは以下ですが、
ruby
1# https://railstutorial.jp/chapters/account_activation?version=5.1#sec-email_tests より 2 3require 'test_helper' 4 5class UserMailerTest < ActionMailer::TestCase 6 7 test "account_activation" do 8 user = users(:michael) 9 user.activation_token = User.new_token 10 mail = UserMailer.account_activation(user) 11...省略 12 assert_match CGI.escape(user.email), mail.body.encoded 13 end 14end
ここで assert_match CGI.escape(user.email), mail.body.encoded
とあるように、user.email
をCGIエスケープした結果がmail.body.encoded
の文字列と同じであることを主張(assert)します。同じであればOKで、パスします。つまり「user.email
をCGI.escape
することであらかじめエスケープ(されているはずの)mail.body.encoded
と同じになる」ことを確認できます。この行をassert_match user.email, mail.body.encoded
と修正すると、user.email
はエスケープしないままmail.body.encoded
と比較されるのでassert_match
は失敗します。したがってテスト結果がREDになるはずです。このテストがGREENである場合、コードの修正が間違っていたり、これまでの理解が足りていないかもしれないことを示しているので、演習の目的を達していないことになります。つまり、問題がある、と言うことです。
投稿2020/01/27 02:55
編集2020/01/27 03:14総合スコア9369
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/27 13:19