我有以下测试:
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?
我已经执行了测试,并期望该作业运行两次(每个商家对象运行一次)。该作业根本没有执行。
为了进行测试,您应该将队列适配器设置为
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