2
3

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 5 years have passed since last update.

Action mailerでlink_toを使うときのRSpec設定

Posted at

Action mailerでlink_toを使う時にやったこと

Action mailerのテンプレートでlink_toを使う時にハマったことメモです。

mailerのテンプレートファイルでlink_toを記述

send_message_to_user.slim
h1 お知らせ
  p = link_to event.event_title, event_url(event)

Helperの読み込み

mailerのテンプレートではlink_toをそのまま使うことができないので、mailerでhelperを読み込む。

testmailer.rb
class TestMailer < ApplicationMailer
  add_template_helper(ActionView::Helpers::UrlHelper)

  default from: 'test@test.com'

  def send_message_to_user
    #省略
  end
end

参考:https://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html

development.rbの設定

しかし、このままだとこんなエラーが...

ActionView::Template::Error:
       Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true

怒られている通り、development.rbにhost情報を設定しなくてはならない
参考:https://qiita.com/saicologic/items/1c692b42ba203bf2d406

development.rb
config.action_mailer.default_url_options = { host: 'localhost:3000' }

今度はうまくいきました!

RSpecでハマる

調子に乗って簡単なRSpecを動かしてみると...

test_mailer_spec.rb
require "rails_helper"

RSpec.describe TestMailer, type: :mailer do
  describe "メール送信機能" do
    let(:user) { FactoryBot.create(:user) }
    let(:mail) { TestMailer.send_message_to_user(user) }

    it "正しいメールアドレスから送信すること" do
      expect(mail.from).to eq ["test@test.com"]
    end
  end
end

先ほど乗り越えたはずのエラーが!

ActionView::Template::Error:
   Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true

確かに記述したはずなのに動かない...としばらくハマってしまいました。

テスト環境でも同様の設定をする必要があった

理由は簡単で、開発環境用のdevelopment.rbだけでなくテスト環境でもhostを指定しなければなりませんでした。

rails_helper.rb
config.action_mailer.default_url_options = { host: 'localhost:3000' }

これで通るようになりました!
テストを書く時には環境ごとの差異に注意しなくてはなりませんね...

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?