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チュートリアル第11章 送信メールのプレビュー 送信メールのテスト

Posted at

###送信メールのプレビュー
テンプレートの実際の表示を簡単に確認するために、メールプレビューという裏技を使う。
Railsでは、特殊なURLにアクセスするとメールのメッセージをその場でプレビューすることができます。
これを利用するには、アプリケーションのdevelopment環境の設定に手を加える必要がある。

####development環境のメール設定
config/environments/development.rb

Rails.application.configure do
  .
  .
  .
  config.action_mailer.raise_delivery_errors = false

  host = 'example.com' # ここをコピペすると失敗します。自分の環境のホストに変えてください。
  # クラウドIDEの場合は以下をお使いください
  config.action_mailer.default_url_options = { host: host, protocol: 'https' }
  # localhostで開発している場合は以下をお使いください
  # config.action_mailer.default_url_options = { host: host, protocol: 'http' }
  .
  .
  .
end

###Userメイラープレビュー
test/mailers/previews/user_mailer_preview.rb

# Preview all emails at http://localhost:3000/rails/mailers/user_mailer
class UserMailerPreview < ActionMailer::Preview

  # Preview this email at http://localhost:3000/rails/mailers/user_mailer/account_activation
  def account_activation
    user = User.first
    user.activation_token = User.new_token
    # activation_tokenは仮の属性でしかない
    UserMailer.account_activation(user)
  end

  # Preview this email at http://localhost:3000/rails/mailers/user_mailer/password_reset
  def password_reset
    UserMailer.password_reset
  end

end

実装すると、指定のURLでアカウント有効化メールをプレビューできるようになります

###演習
1.
Railsのプレビュー機能を使って、ブラウザから先ほどのメールを表示してみてください。「Date」の欄にはどんな内容が表示されているでしょうか?
urlにrails/mailers/user_mailer/account_activationを貼り付けた。
時日が表示されていた。

###送信メールのテスト
####Userメイラーのテスト(Railsによる自動生成)

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.
    # エスケープ済みメールアドレスをテスト
    # assert_matchという非常に強力なメソッドが使われています。
    #   これを使えば、正規表現で文字列をテスト
    # fixtureユーザーに有効化トークンを追加している。
    #   追加しない場合は空白になります。
    # このテストがパスするには、テストファイル内のドメイン名を
    #   正しく設定する必要があります    
  end
end

####テストのドメインホストを設定する
config/environments/test.rb

Rails.application.configure do
  .
  .
  .
  config.action_mailer.delivery_method = :test
  config.action_mailer.default_url_options = { host: 'example.com' }
  .
  .
  .
end

#####テスト

ubuntu:~/environment/sample_app (account-activation) $ rails test:mailers
Started with run options --seed 19781

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

Finished in 0.30378s
1 tests, 9 assertions, 0 failures, 0 errors, 0 skips

###演習
1.
この時点で、テストスイートが green になっていることを確認してみましょう。

ubuntu:~/environment/sample_app (account-activation) $ rails test
Running via Spring preloader in process 6539
Started with run options --seed 45227

  44/44: [============================] 100% Time: 00:00:04, Time: 00:00:04

Finished in 4.49236s
44 tests, 177 assertions, 0 failures, 0 errors, 0 skips

リスト 11.20で使ったCGI.escapeの部分を削除すると、テストが red に変わることを確認してみましょう

ubuntu:~/environment/sample_app (account-activation) $ rails test
Running via Spring preloader in process 6890
Started with run options --seed 59714

ERROR["test_account_activation", #<Minitest::Reporters::Suite:0x0000562675a5dfb0 @name="UserMailerTest">, 2.0893587010000374]
 test_account_activation#UserMailerTest (2.09s)
ArgumentError:         ArgumentError: wrong number of arguments (given 0, expected 2..3)
            test/mailers/user_mailer_test.rb:13:in `block in <class:UserMailerTest>'

  44/44: [============================] 100% Time: 00:00:03, Time: 00:00:03

Finished in 3.03524s
44 tests, 175 assertions, 0 failures, 1 errors, 0 skips
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?