禁用 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:延迟的作业无法使用邮件程序并给出路由错误