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

有什么想法吗??

推荐答案

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

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相关问答推荐

正确更新其他列的更新列

Rails 中签名和加密的 cookie 有什么区别?

未加载库:/usr/local/opt/readline/lib/libreadline.6.dylib (LoadError)

Heroku:不能运行超过 1 个免费大小的测功机

Ruby 中 as_json 和 to_json 方法的区别

Ruby 根据属性在数组中查找并返回对象

Rails 5:无法从参数中检索哈希值

未捕获的 ReferenceError:未定义 React

rails structure.sql和schema.rb有什么区别

rails 回调中 after_create、after_save 和 after_commit 的区别

如何在 Ubuntu 上使用 gem 安装 Rails

rails 控制台无法启动

Rails:地址已在使用中 - bind(2) (Errno::EADDRINUSE)

在rails 4中没有计数的复数

OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server hello A

try 运行 rspec 时出错:`require':无法加载此类文件 -- rails_helper (LoadError)

rails 4中secret_key_base的用途是什么

Ruby on Rails 控制台在加载时挂起

Rspec 3 如何测试闪存消息

Rails 4按方法查找或创建不起作用