如何检查邮件在 rspec 中发送 在邮件规范中在控制器规范中以及电子邮件设置为deliver_now时在控制器规范中以及电子邮件设置为deliver_later时

问题描述

Actionmailer

def welcome_send(user)
        @user = user
        mail to: user.email,subject: 'Welcome to my site',from: 'suhasmv29@gmail.com'
    end

用于验证邮件已发送的 RSpec 测试用例

it "sends a confirmation email" do
      expect { mail.to }.to change { ActionMailer::Base.deliveries.count }.by(1)
    end

错误

expected `ActionMailer::Base.deliveries.count` to have changed by 1,but was changed by 0

解决方法

在邮件规范中

如果是邮件程序规范,您可以检查电子邮件的发件人、收件人和主题,如下所示。

   it 'sends a confirmation email' do
     expect do
       perform_enqueued_jobs do # To perform the job 
         UserMailer.welcome_send(user).deliver_later # Create and send user         
       end
     end.to change { ActionMailer::Base.deliveries.size }.by(1)
   end

在控制器规范中以及电子邮件设置为deliver_now时

您还可以验证电子邮件是否在控制器规范中发送。

  it 'sends a confirmation email when a new user created' do
    expect do
      post :create,params: {}
    end.to change { ActionMailer::Base.deliveries.size }.by(1)
  end

在控制器规范中以及电子邮件设置为deliver_later时

it 'should enqueue a mailer job' do
   expect do
     post :create,params: {}
   end.to have_enqueued_job.exactly(:once).and have_enqueued_job(ActionMailer::DeliveryJob)
end

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...