正在try 升级到Rails 4.2,使用延迟的_作业(job)_活动_记录.我没有为测试环境设置延迟的_作业(job)后端,因为我认为作业(job)会立即执行.

我正在try 用RSpec测试新的"稍后交付"方法,但我不确定如何测试.

旧控制器代码:

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))

现在我用它会出错.(双重"mailer"收到意外消息:稍后发送(无参数))

只是

expect(ServiceMailer).to receive(:new_user)

对于nil:NilClass的"未定义方法'deliver_later'也失败"

我try 了一些示例,让您可以在ActiveJob中使用test_helper查看作业(job)是否排队,但我还没有成功测试正确的作业(job)是否排队.

expect(enqueued_jobs.size).to eq(1)

如果包含test_helper,则通过,但它不允许我判断发送的邮箱是否正确.

我想做的是:

  • 测试正确的邮箱是否已排队(或直接在test env中执行)
  • 使用正确的参数(@user)

有什么 idea 吗??

推荐答案

如果我理解正确,你可以:

message_delivery = instance_double(ActionMailer::MessageDelivery)
expect(ServiceMailer).to receive(:new_user).with(@user).and_return(message_delivery)
allow(message_delivery).to receive(:deliver_later)

关键是,你需要以某种方式为deliver_later人提供双人间.

Ruby-on-rails相关问答推荐

我try 使用Ruby on Rails7创建一个Carbon 足迹计算器.但我无法保存和用户S对象

如何将POST-CSSS-IMPORT与TRANWIND-RACKS和IMPORT映射一起使用

带有data-turbo的rails`link_to‘未获得turbo_stream请求格式

如何使用 activerecord activerecord-session_store 在 Rails 应用程序中使用 cookie 值在数据库中查找会话记录

为什么 Rails 执行器不能识别内核的改进?

rspec中日期时间结束时的分数是多少?

您如何查看在 Rails 中触发回调的关联模型?

来自控制台的 ActionCable.server.broadcast

Rails:保存子对象时更新父对象

Rails 将 form_for 对象传递给部分

对于 Visual Studio 用户来说,最好的 Ruby on Rails 环境是什么?

在 Rails 中,如何处理多个选中的复选框,只需拆分 , 或?

在公共 Rails 应用程序中将敏感数据存储在哪里?

mongoid 中 embeds_many 和 has_many 的区别

Rails 中是否有 HTML 安全截断方法?

ActiveRecord 事务中的错误处理?

:javascript haml 标签中的内联Ruby ?

Rails 3.1 中的 Rails.cache 错误 - TypeError: can't dump hash with default proc

如何使用 Rails 3 获取请求的目标控制器和操作?

rails路由中资源和资源之间的区别?