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
を実行すると、
すべての例がパスするはずです。