【126日目】【1日20分のRailsチュートリアル】【第10章】メールプレビューのテストを作成する
今日は「10.1.2 AccountActivationsメイラーメソッド」のメールプレビューのテストを作成するところから。
10.1.2 AccountActivationsメイラーメソッド
最後に、このメールプレビューのテストも作成して、プレビューをダブルチェックできるようにします。
テスト例がRailsによって自動生成されているので、これを利用してテストを作成する。
元々あった"password_reset"のテストは今は要らないと思うのでコメントアウトした。
test/mailers/user_mailer_test.rb
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 end
このテストがパスするには、テストファイル内のドメイン名を正しく設定する必要があります (リスト10.19)。
テストで送り元のメールアドレス(mail.from)見てるけど、メールアドレスなんてどこで設定してるんだろうと思ってた。
テスト向けにはここで設定するのかー。
config/environments/test.rb
config.action_mailer.default_url_options = { host: 'example.com' }
これでテスト通りました。
$ bundle exec rake test:mailers 1 tests, 9 assertions, 0 failures, 0 errors, 0 skips
あとはユーザー登録を行うcreateアクションに数行追加するだけで、メイラーをアプリケーションで実際に使うことができます。
createアクションのユーザー新規作成時の処理を変更。
変更前は、ユーザーのプロファイルページ (7.4) にリダイレクトしていましたが、アカウント有効化を実装するうえでは無意味な動作なので、リダイレクト先をルートURLに変更してあります。
アカウント有効化してもらわないとプロファイルページにリダイレクトしても見れない…かな…。無意味ですね。
app/controllers/users_controller.rb
: def create @user = User.new(user_params) if @user.save UserMailer.account_activation(@user).deliver_now flash[:info] = "Please check your email to activate your account." redirect_to root_url else render 'new' end end :
リスト10.21ではリダイレクト先をプロファイルページからルートURLに変更し、かつユーザーは以前のようにログインしないようになっています。
(中略)
失敗が発生するテストの行をひとまずコメントアウトしておきます (リスト10.22)。コメントアウトした部分は、10.1.4でアカウント有効化のテストをパスさせるときに元に戻します。
アプリケーションの挙動変えちゃったもんね。
test/integration/users_signup_test.rb
: # assert_template 'users/show' # assert is_logged_in?
コメントアウトした状態でテストが通ることを確認。
$ bundle exec rake test 43 tests, 175 assertions, 0 failures, 0 errors, 0 skips
この状態で実際に新規ユーザーとして登録してみると、リダイレクトされて図10.4のようになり、リスト10.23のようなメールが生成されます。
新規ユーザーを登録してみよう。
サーバーを起動して
$ rails server -b $IP -p $PORT
適当なユーザー名とメールアドレスとパスワードでユーザー登録。
flashメッセージ表示されました!
ただし、実際にメールが生成されるわけではないのでご注意ください。
実際にメール送信されるならメールアドレスはちゃんとしたの使わないとな、と思ってた。実際のメール送信はまだなにか必要なのか。
ここに引用したのはサーバーログに出力されたメールです。
長いから引用はしないけどサーバー起動したターミナルにメール内容出力されてた。処理は動いてそうだね。
今日の学習時間は【26分】。
メイラーメソッド使う準備するの長かった…。
次は「10.1.3 アカウントを有効化する」から。