【问题标题】:ActiveJob inline queue adapter for specific jobs用于特定作业的 ActiveJob 内联队列适配器
【发布时间】:2017-03-28 14:19:41
【问题描述】:

有没有办法将 ActiveJob 队列适配器设置为内联特定后台作业?

就我而言,我想在测试中运行一些后台作业来构建集成测试。我不关心工作的内部细节,因为我的目的只是运行后台工作并断言结果。但是这些集成测试并未涵盖所有后台作业,因此我不想全局设置队列适配器。

【问题讨论】:

    标签: ruby-on-rails ruby rails-activejob


    【解决方案1】:

    您可以使用 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
    

    【讨论】:

      【解决方案2】:

      ActiveJob::Base 的queue_adapter 类属性可以在任何作业类上设置,它将影响作业类本身和任何子类。所以你可以有类似的东西

      class JobThatMustRunInlineWhileTesting < ActiveJob::Base
        if Rails.env.test?
          queue_adapter :inline
        end
      
        # rest of your job
      end
      

      【讨论】:

        猜你喜欢
        • 2015-03-23
        • 2017-02-11
        • 2018-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-16
        • 2015-12-05
        相关资源
        最近更新 更多