0

I've got custom mailer, nothing special:

class UserMailer < ApplicationMailer
  def welcome_email
    @user = params[:user]
    mail(
      to: @user.email,
      subject: 'Welcome to the app',
    )
  end
end

It's triggered by UserMailer.with(user: @user).welcome_email.deliver_later. To test it I prepared specs:

let(:user_mailer_double) { class_double(UserMailer) }
      it 'sends welcome email' do
        expect(user_mailer_double).to receive(:welcome_email).with(user: user)
        subject
      end

But I'm getting an error:

expected: 1 time with arguments: ({:user=>#User id: 195, email "joe@gmail.com" ....)
received: 0 times
mr_muscle
  • 2,536
  • 18
  • 61
  • You're using "deliver_later" which means that the email is enqueued to be delivered later. You need to either use "deliver_now" or assert that the email is in the queue. Check this answer https://stackoverflow.com/questions/27647749/how-to-test-actionmailer-deliver-later-with-rspec – cesartalves Feb 23 '21 at 15:35
  • What's your `subject`? Your code and your error do not match. – Schwern Feb 23 '21 at 16:47

0 Answers0