TLDR;如何测试异步 ActionMailer 操作(使用 Sidekiq)的 PORO 参数是否正确序列化和反序列化?
Sidekiq 提供 RSpec 匹配器,用于测试作业是否入队并执行作业(使用给定参数)。
--
为了给您一些背景信息,我有一个带有 ActionMailer 的 Ruby on Rails 4 应用程序。ActionMailer 中有一个方法,它接受 PORO 作为参数 - 引用我在电子邮件中需要的数据。我使用 Sidekiq 来处理后台作业。事实证明,当 Sidekiq 决定执行这项工作时,反序列化将失败的论点存在问题。我还没有找到一种方法来测试 un/marshaling 的正确性,以便在执行时使用我调用该操作的 PORO。
例如:
给定一个带有动作的 ActionMailer
class ApplicationMailer < ActionMailer::Base
def send_alert profile
@profile = profile
mail(to: profile.email)
end
end
...
我会这样使用它
profile = ProfileDetailsService.new(user)
ApplicationMailer.send_alert(profile).deliver_later
...
并进行这样的测试(但这失败了)
let(:profile) { ProfileDetailsService.new(user) }
it 'request an email to be sent' do
expect {
ApplicationMailer.send_alert(profile).deliver_later
}.to have_enqueued_job.on_queue('mailers')
end
任何帮助将不胜感激。