有没有办法将 ActiveJob 队列适配器设置为内联特定后台作业?
就我而言,我想在测试中运行一些后台作业来构建集成测试。我不关心作业内部细节,因为我的目的只是运行后台作业并断言结果。然而,这些集成测试并没有涵盖所有后台作业,所以我不想全局设置队列适配器。
您可以使用 RSpec 的 around_hook 功能:
module WithQueueAdapter
def with_queue_adapter(new_adapter)
around do |example|
begin
old_adapter = ActiveJob::Base.queue_adapter
ActiveJob::Base.queue_adapter = new_adapter
example.run
ensure
ActiveJob::Base.queue_adapter = old_adapter
end
end
end
end
RSpec.configure do |config|
config.extend WithQueueAdapter
end
在你的测试中
describe "My cool feature" do
with_queue_adapter :inline
# examples go there
end
ActiveJob::Base 的 queue_adapter 类属性可以在任何作业类上设置,它将影响作业类本身和任何子类。所以你可以有类似的东西
class JobThatMustRunInlineWhileTesting < ActiveJob::Base
if Rails.env.test?
queue_adapter :inline
end
# rest of your job
end
在作业级别覆盖适配器
class SendmessageJob < ApplicationJob
queue_as :default
self.queue_adapter = :async
def perform(*args)
# TwilioMessenger.send_text_message(full_message)
end
end