LoginSignup
0
0

More than 1 year has passed since last update.

railsチュートリアル第12章 送信メールのテスト

Posted at

送信メールのテスト

パスワード再設定用メイラーメソッドのテストを追加する

test/mailers/user_mailer_test.rb

require 'test_helper'

class UserMailerTest < ActionMailer::TestCase
  test "account_activation" do
    user = users(:michael)
    user.activation_token = User.new_token
    mail = UserMailer.account_activation(user)
    assert_equal "Account activation", mail.subject
    assert_equal [user.email], mail.to
    assert_equal ["noreply@example.com"], mail.from
    assert_match user.name,               mail.body.encoded
    assert_match user.activation_token, mail.body.encoded
    assert_match CGI.escape(user.email),  mail.body.encoded
    # 上のメソッドを使うとテスト用のユーザーのメールアドレスをエスケープすることもできます
    # エスケープ済みメールアドレスをテスト
    # assert_matchという非常に強力なメソッドが使われています。
    #   これを使えば、正規表現で文字列をテスト
    # fixtureユーザーに有効化トークンを追加している。
    #   追加しない場合は空白になります。
    # このテストがパスするには、テストファイル内のドメイン名を
    #   正しく設定する必要があります
  end

  test "password_reset" do
    user = users(:michael)
    # テストユーザー
    user.reset_token = User.new_token
    # 新しくトークンを作成
    mail = UserMailer.password_reset(user)
    # mail  わからない。
    assert_equal "Password reset", mail.subject
    # メールのタイトルがあっているか?
    assert_equal [user.email], mail.to
    # 宛先はユーザーアドレスはあっているか?
    assert_equal ["noreply@example.com"], mail.from
    # 送り元はあっているか?
    assert_match user.reset_token,        mail.body.encoded
    # 第一引数の正規表現の値と第二引数の値がマッチすれば
    #    成功になるメソッドです。
    # メールの本文を(US-ASCIIに)エンコードで、テストの前に
    #    テストファイル内のドメイン名を正しく設定する
    assert_match CGI.escape(user.email),  mail.body.encoded
    # 与えられた文字列を URL エンコードした文字列を新しく作成し返します。
    # それと一致するか?
  end
end

演習

1.
メイラーのテストだけを実行してみてください。このテストは green になっているでしょうか?

ubuntu:~/environment/sample_app (password-reset) $ rails test:mailers
Started with run options --seed 62955

  2/2: [==============================] 100% Time: 00:00:00, Time: 00:00:00

Finished in 0.23588s
2 tests, 16 assertions, 0 failures, 0 errors, 0 skips

2.
リスト 12.12にある2つ目のCGI.escapeを削除すると、テストが red になることを確認してみましょう。

 assert_match mail.body.encoded

これでいいのかな?
とりあえずエラーになった。

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