禁用 ruby​​ on rails 作业进行测试

Posted

技术标签:

【中文标题】禁用 ruby​​ on rails 作业进行测试【英文标题】:Disable ruby on rails job for test 【发布时间】:2017-04-14 23:24:42 【问题描述】:

我正在使用 rspec 编写控制器测试,操作完成后,我的工作应该是向管理员用户发送电子邮件。但我想为我的测试禁用这项工作或以某种方式模拟它。我该怎么做?

我正在使用 delayed_job_active_record + daemons 宝石。

class AdminNotificationJob < ActiveJob::Base
  queue_as :default

  def perform(method, parameter)
    User.admin.includes(:profile).each do |admin|
      AdminMailer.send(method, admin, parameter).deliver_later
    end
  end
end

【问题讨论】:

【参考方案1】:
#config/environment/test.rb
config.active_job.queue_adapter = :test

# in spec
expect  your_action_that_triggers_job_enqueuing 
  .to have_enqueued_job(AdminNotificationJob)
  .with(your_arguments)

【讨论】:

config.active_job.queue_adapter = :test - 这就是我要找的,谢谢!【参考方案2】:

您的控制器测试如下所示:

it "enqueues a AdminNotification" do
  expect 
    get :your_controller_action, 
  .to have_enqueued_job(AdminNotificationJob)
end

这使用rspec-rails 上的#have_enqueued_job 方法

【讨论】:

同时 :) +1 我认为这叫做“孪生”? ;)

以上是关于禁用 ruby​​ on rails 作业进行测试的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails:延迟的作业无法使用邮件程序并给出路由错误

Ruby on Rails Cron 作业示例

Ruby on Rails 单元测试

Ruby on Rails 单元测试

使用 RESTful 身份验证插件进行 Ruby on Rails 功能测试

如何在 Ruby on Rails 3.1 中禁用资产管道(链轮)消息的日志记录?