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

问题描述 投票:0回答:1

我有以下测试:

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 队列适配器设置为内联:

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

测试中的Job根本没有执行。我看到两个 put 语句的输出,但作业未运行。我已检查有 2 个符合预期的商家对象。在开发环境中,我使用 sidekiq 作为作业后端,它可以从 Rails 控制台手动执行作业,也可以在应用程序中安排作业。

如何在测试中正确执行ActiveJob?

我已经执行了测试,并期望该作业运行两次(每个商家对象运行一次)。该作业根本没有执行。

ruby-on-rails ruby testing inline rails-activejob
1个回答
1
投票

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

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 的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.