ruby Rails:如何使用内联适配器在测试中正确执行ActiveJob?

jtw3ybtb  于 2023-10-18  发布在  Ruby
关注(0)|答案(1)|浏览(85)

我有以下测试:

require "test_helper"

class DisbursementGenerationTest < ActionDispatch::IntegrationTest
  test "disburse test orders" do
    puts "Performing job..."
    Merchant.all.each do |merchant|   
      DisburseJob.perform_later(merchant)      
    end
    puts "Job performed"
    sleep 10
    assert_equal 2, Disbursement.count
  end
end

在/config/environment/test.rb中,我将ActiveJob队列适配器设置为inline:

Rails.application.configure do
  config.active_job.queue_adapter = :inline

测试中的作业根本不执行。我看到了两个puts语句的输出,但作业没有运行。我已经检查了有2个商家对象的预期。在开发环境中,我使用sidekiq作为作业后端,它可以从rails控制台手动执行作业,也可以在应用程序中执行计划作业。
如何在测试中正确执行ActiveJob?
我已经执行了测试,并期望作业运行两次(每个商户对象运行一次)。作业根本未执行。

ou6hu8tu

ou6hu8tu1#

为了进行测试,您应该将队列适配器设置为test

config.active_job.queue_adapter = :test

然后,您可以使用perform_enqueued_jobs执行作业:

class DisbursementGenerationTest < ActionDispatch::IntegrationTest
  test "disburse test orders" do
    Merchant.all.each do |merchant|   
      DisburseJob.perform_later(merchant)      
    end

    perform_enqueued_jobs

    assert_equal 2, Disbursement.count
    assert_performed_jobs 2
  end
end

关于测试助手和测试AJ的更多信息。

相关问题