我正在尝试升级到Rails 4.2,并使用delayed_job_active_record。我没有为测试环境设置delayed_job后端,因为我认为这样工作任务将会立即执行。
我正在尝试使用RSpec测试新的“deliver_later”方法,但是我不确定该如何操作。
旧的控制器代码:
ServiceMailer.delay.new_user(@user)
新的控制器代码:
ServiceMailer.new_user(@user).deliver_later
我曾这样测试它:
expect(ServiceMailer).to receive(:new_user).with(@user).and_return(double("mailer", :deliver => true))
现在我使用那个会出错。(接收到意外的消息“deliver_later”,但没有参数)
只是
expect(ServiceMailer).to receive(:new_user)
出现问题:'undefined method `deliver_later' for nil:NilClass'
我尝试了一些例子,使用ActiveJob的test_helper来确认任务是否已经入队,但我没有成功测试到正确的任务已经入队。
expect(enqueued_jobs.size).to eq(1)
如果包含test_helper,此测试可以通过,但我无法检查发送的是否是正确的电子邮件。
我的目标是:
- 测试队列中是否有正确的电子邮件(在测试环境中立即执行)
- 使用正确的参数(@user)
有什么建议吗? 谢谢