有没有办法将ActiveJob队列适配器设置为内联特定的后台作业?
在我的情况下,我想在测试中运行一些后台作业来构建集成测试。我不打扰工作内部细节,因为我的目的只是运行后台作业并断言结果。但是,这些集成测试并未涵盖所有后台作业,因此我不想全局设置队列适配器。
答案 0 :(得分:2)
您可以使用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
答案 1 :(得分:1)
可以在任何作业类上设置ActiveJob :: Base的queue_adapter类属性,它将影响作业类本身和任何子类。所以你可以有像
这样的东西class MyCustomWidget(self):
_qt_designer = False
def __init__(self, parent):
if self._qt_designer:
# only while inside qt designer
# do init
class MyPlugin(QPyDesignerCustomWidgetPlugin):
def __init__(self, parent=None):
super().__init__(parent)
MyCustomWidget._qt_designer = True # set class variable
def createWidget(self, parent):
return MyCustomWidget(parent)