[软件设计/软件工程] 如何使用 rspec 测试 ActionMailer 交付

[复制链接]
发表于 2022-5-3 12:08:08
问题
尝试使用延迟的作业活动记录升级到 Rails 4.2。我没有为测试环境设置延迟作业后端,因为我认为该作业会立即执行。

我正在尝试测试新的“deliver_later”。使用 Rspec 的方法,但我不确定如何。

旧控制器代码:

ServiceMailer.delay.new_user(@user)

新控制器代码:

ServiceMailer.new_user(@user).deliver_later

我曾经这样测试:

期望(ServiceMailer).to receive(:new_user).with(@user).and_return(double("mailer", :deliver => true))

现在我得到了它的错误。 (双重“邮件程序”收到意外消息:稍后通过(无参数))

只要

期望(ServiceMailer)。接收(:new_user)

使用 'undefined 方法 'deliver_later' nil:NilClass 也失败了

我已经尝试了一些示例,这些示例允许您使用 ActiveJob 中的 test_helper 来查看作业是否已排队,但我还没有成功测试正确的作业正在排队。

期望(enqueued_jobs.size).to eq(1)

如果包含 test_helper,这将通过,但它不允许我检查是否发送了正确的电子邮件。

我想做的是:

有任何想法吗? ?

谢谢

回答
如果我理解正确,您可以:
  1. message_delivery = instance_double(ActionMailer::MessageDelivery)
  2. expect(ServiceMailer).to receive(:new_user).with(@user).and_return(message_delivery)
  3. allow(message_delivery).to receive(:deliver_later)
复制代码

关键是您需要以某种方式为 Deliver_later 提供双精度。





上一篇:替换整个页面上多个单词的所有例子
下一篇:如何从列表中的整数中删除重复的数字

使用道具 举报

Archiver|手机版|小黑屋|吾爱开源 |网站地图

Copyright 2011 - 2012 Lnqq.NET.All Rights Reserved( ICP备案粤ICP备14042591号-1粤ICP14042591号 )

关于本站 - 版权申明 - 侵删联系 - Ln Studio! - 广告联系

本站资源来自互联网,仅供用户测试使用,相关版权归原作者所有

快速回复 返回顶部 返回列表