【问题标题】:How to check mail is sent in rspec如何检查邮件是否在 rspec 中发送
【发布时间】:2021-02-04 06:24:43
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 rspec actionmailer rspec-rails


    【解决方案1】:

    在邮件规范中

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

       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
    

    【讨论】:

      猜你喜欢
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      • 2013-04-09
      相关资源
      最近更新 更多