'ActionMailer: How to test a mailer with parameters

I have a mailer looking like this:

class HelperMailer < ApplicationMailer

def reset_password(helper:)
    @to = helper
    @reset_password_token = params[:token]

    mail_custom

    mail(to: @to.email,
         subject: 'Changement de mot de passe',
         from: '[email protected]') do |format|
      format.mjml
      format.text
    end
  end

This is how I wrote my rspec test:

it 'sends email' do
   mail = double
   expect(HelperMailer).to receive(:reset_password).and_return(mail)
   expect(mail).to receive(:deliver_later)

   delete :destroy, params: { login: email }
end

This test works when I call the method like this:

HelperMailer.reset_password(helper: helper).deliver_later

This test fails when I call the method like this:

HelperMailer.with(token: 'blabla').reset_password(helper: helper).deliver_later

The error:

Failure/Error: expect(HelperMailer).to receive(:reset_password).and_return(mail)
     
       (HelperMailer (class)).reset_password(*(any args))
           expected: 1 time with any arguments
           received: 0 times with any arguments

I can't find any documentation about ActionMailer::Parameterized testing. How should I test that my email is sent?

Thanks



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source