instance method assert_enqueued_email_with

Ruby on Rails edge

Since v5.2.8.1

Available in: v5.2.8.1 v6.0.6.1 v6.1.7.10 v7.0.10 v7.1.6 v7.2.4 v8.0.5.1 v8.1.4 edge

Signature

assert_enqueued_email_with(mailer, method, params: nil, args: nil, queue: nil, &block)

Asserts that a specific email has been enqueued, optionally matching arguments and/or params.

“‘ def test_email

ContactMailer.welcome.deliver_later
assert_enqueued_email_with ContactMailer, :welcome

end

def test_email_with_parameters

ContactMailer.with(greeting: "Hello").welcome.deliver_later
assert_enqueued_email_with ContactMailer, :welcome, params: { greeting: "Hello" }

end

def test_email_with_arguments

ContactMailer.welcome("Hello", "Goodbye").deliver_later
assert_enqueued_email_with ContactMailer, :welcome, args: ["Hello", "Goodbye"]

end

def test_email_with_named_arguments

ContactMailer.welcome(greeting: "Hello", farewell: "Goodbye").deliver_later
assert_enqueued_email_with ContactMailer, :welcome, args: [{ greeting: "Hello", farewell: "Goodbye" }]

end

def test_email_with_parameters_and_arguments

ContactMailer.with(greeting: "Hello").welcome("Cheers", "Goodbye").deliver_later
assert_enqueued_email_with ContactMailer, :welcome, params: { greeting: "Hello" }, args: ["Cheers", "Goodbye"]

end

def test_email_with_parameters_and_named_arguments

ContactMailer.with(greeting: "Hello").welcome(farewell: "Goodbye").deliver_later
assert_enqueued_email_with ContactMailer, :welcome, params: { greeting: "Hello" }, args: [{farewell: "Goodbye"}]

end

def test_email_with_parameterized_mailer

ContactMailer.with(greeting: "Hello").welcome.deliver_later
assert_enqueued_email_with ContactMailer.with(greeting: "Hello"), :welcome

end

def test_email_with_matchers

ContactMailer.with(greeting: "Hello").welcome("Cheers", "Goodbye").deliver_later
assert_enqueued_email_with ContactMailer, :welcome,
  params: ->(params) { /hello/i.match?(params[:greeting]) },
  args: ->(args) { /cheers/i.match?(args[0]) }

end “‘

If a block is passed, that block should cause the specified email to be enqueued.

“‘ def test_email_in_block

assert_enqueued_email_with ContactMailer, :welcome do
  ContactMailer.welcome.deliver_later
end

end “‘

Parameters

mailer req
method req
params key = nil
args key = nil
queue key = nil
block block
Source
# File actionmailer/lib/action_mailer/test_helper.rb, line 166
    def assert_enqueued_email_with(mailer, method, params: nil, args: nil, queue: nil, &block)
      if mailer.is_a? ActionMailer::Parameterized::Mailer
        params = mailer.instance_variable_get(:@params)
        mailer = mailer.instance_variable_get(:@mailer)
      end

      args = Array(args) unless args.is_a?(Proc)
      queue ||= mailer.delivery_job.new(mailer.name).queue_name

      expected = ->(job_args) do
        job_kwargs = job_args.extract_options!

        [mailer.to_s, method.to_s, "deliver_now"] == job_args &&
          params === job_kwargs[:params] && args === job_kwargs[:args]
      end

      assert_enqueued_with(job: mailer.delivery_job, args: expected, queue: queue.to_s, &block)
    end

Defined in actionmailer/lib/action_mailer/test_helper.rb line 166 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActionMailer::TestHelper

Type at least 2 characters to search.

Use the arrow keys to navigate results, Enter to open one, Escape to close.

Keyboard shortcuts

/
Focus search
⌘K / Ctrl-K
Command palette
?
This help
Esc
Close