【问题标题】:RSpec and Sidekiq: performing the queued emails so you can test their contentRSpec 和 Sidekiq:执行排队的电子邮件,以便您可以测试其内容
【发布时间】:2015-07-24 11:07:02
【问题描述】:

我正在测试我的 Rails 4 应用程序 Sidekiq 在发送电子邮件方面的功能。我有一个简单的问题。我的工人

 def perform(response_id)
    response = Response.find(response_id)
    micropost = response.micropost
    if response && micropost
       MicropostMailer.notify_question_followers_of_response(micropost, response,  micropost.user.email).deliver_now unless micropost.user == response.user
       micropost.followers.select{|follower| follower != response.user}.map{|follower|MicropostMailer.notify_question_followers_of_response(micropost, response, follower.email).deliver_now}
    end
 end

如您所见,发送几封电子邮件。细节并不那么重要(我认为)。

  expect { MicropostWorker.perform_async(@answer.id) }.to change(MicropostWorker.jobs, :size).by(1)

...做它应该做的。

但我想了解电子邮件的具体细节,以测试它们是否会发送给合适的人。每次我......

    expect(ActionMailer::Base.deliveries.length).to eq(3)

例如,我得到 0,我认为这是因为电子邮件没有立即发送。如何在测试中“执行异步发送”以便查看这些电子邮件

我看到了

  perform_enqueued_jobs do
    expect(ActionMailer::Base.deliveries.length).to eq(3)
  end

在另一个问题中,但我认为这是旧的......

【问题讨论】:

标签: email ruby-on-rails-4 rspec sidekiq


【解决方案1】:

跳过 Sidekiq 并像普通 Ruby 对象一样对其进行测试:

MicropostWorker.new.perform(fakeanswer.id)
expect(ActionMailer::Base.deliveries.length).to eq(3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    相关资源
    最近更新 更多