Rails Tutorial 第3版 第10章

Ruby on Rails チュートリアル:実例を使って Rails を学ぼう の2周目です。
第10章 アカウント有効化とパスワード再設定 | Rails チュートリアル

第10章 アカウント有効化とパスワード再設定

アカウント周りの実装が学べます。
個人的にはメール送信のテストが良いと思いました。
また、チュートリアルにherokuいらんかもと思っていましたが、
メール送信できる感動を味わえるので、やっぱりやっといたほうがいいですね。
制限はあるもののメール送信機能がほぼ無料で使えるというのは、良いです。

メール送信テスト

clearしておく。

def setup
  ActionMailer::Base.deliveries.clear
end

メール送信されたか確認。

  assert_equal 1, ActionMailer::Base.deliveries.size

メール本文はmailerのテストで実施。assert_equalでチェック。

test "password_reset" do
  user = users(:michael)
  user.reset_token = User.new_token
  mail = UserMailer.password_reset(user)
  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
  assert_match CGI::escape(user.email), mail.body.encoded
end

ActiveRecord::Base#toggle!

テストの中で一時的にある値を反転させる場合に使用。

user.toggle!(:activated)

assert_select 便利

input hiddenのvalueチェックはこう書ける。

assert_select "input[name=email][type=hidden][value=?]", user.email

メール送信config設定

config/environments/production.rb

config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
host = "your_heroku_app_name.herokuapp.com"
config.action_mailer.default_url_options = { host: host }
  ActionMailer::Base.smtp_settings = {
  :address        => 'smtp.sendgrid.net',
  :port           => '587',
  :authentication => :plain,
  :user_name      => ENV['SENDGRID_USERNAME'],
  :password       => ENV['SENDGRID_PASSWORD'],
  :domain         => 'heroku.com',
  :enable_starttls_auto => true
}