メインコンテンツまでスキップ

send_email マッチャー

send_email マッチャーは、指定されたパラメータでメールが送信されたかどうかを期待ブロック内でチェックするために使用されます。

注意: このマッチャーは、例が実際にテストアダプターを使用してメールを送信し、後でバックグラウンドで送信されるジョブとしてスケジュールされていないことを意味します。

テストでメールを送信するには、次のことを確認してください:

  • ActionMailer が配信を実行するように設定されていること - Rails.application.config.action_mailer.perform_deliveries = true
  • メールが非同期で送信される場合(.deliver_later を使用して)、ActiveJob がインラインアダプターを使用していること - Rails.application.config.active_job.queue_adapter = :inline
  • ActionMailer がテストアダプターを使用していること - Rails.application.config.action_mailer.delivery_method = :test

ジョブとしてスケジュールされたメールがあるかどうかをチェックする場合は、have_enqueued_email マッチャーを使用してください。

指定された複数のパラメータで送信されたメールのチェック

次のような内容の "spec/mailers/notifications_mailer_spec.rb" という名前のファイルがあるとします:

require "rails_helper"

RSpec.describe NotificationsMailer do
it "checks email sending by multiple params" do
expect {
NotificationsMailer.signup.deliver_now
}.to send_email(
from: 'from@example.com',
to: 'to@example.org',
subject: 'Signup'
)
end
end

rspec spec/mailers/notifications_mailer_spec.rb を実行すると、

すべての例がパスするはずです。

マッチングパラメータで送信されたメールのチェック

次のような内容の "spec/mailers/notifications_mailer_spec.rb" という名前のファイルがあるとします:

require "rails_helper"

RSpec.describe NotificationsMailer do
it "checks email sending by one param only" do
expect {
NotificationsMailer.signup.deliver_now
}.to send_email(
to: 'to@example.org'
)
end
end

rspec spec/mailers/notifications_mailer_spec.rb を実行すると、

すべての例がパスするはずです。

指定されたパラメータでメールが送信されなかったことのチェック

次のような内容の "spec/mailers/notifications_mailer_spec.rb" という名前のファイルがあるとします:

require "rails_helper"

RSpec.describe NotificationsMailer do
it "checks email not sent" do
expect {
NotificationsMailer.signup.deliver_now
}.to_not send_email(
to: 'no@example.org'
)
end
end

rspec spec/mailers/notifications_mailer_spec.rb を実行すると、

すべての例がパスするはずです。