使用 Minitest 测试 ActiveJob 不会命中 Sidekiq 队列
Testing ActiveJob with Minitest doesn't hit Sidekiq queue
在 Rails 4.2 我有以下 ActiveJob 测试:
test/jobs/import_job_test.rb
require 'test_helper'
class ImportJobTest < ActiveJob::TestCase
def setup
@response = ImportJob.perform_later "'testing Sidekiq queue jobs'"
end
test "enqueued jobs" do
assert_enqueued_jobs 1
clear_enqueued_jobs
assert_enqueued_jobs 0
end
test "ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper" do
assert_equal ["'testing Sidekiq queue jobs'"], @response.arguments
end
test "a second new job has been enqueued with the given arguments" do
assert_enqueued_jobs 1
assert_enqueued_with(job: ImportJob, args: ["'queuing a second job'"], queue: 'default') do
ImportJob.perform_later "'queuing a second job'"
end
assert_enqueued_jobs 2
end
end
运行 测试变绿:
$ rake test test/jobs/import_job_test.rb
Started with run options --seed 35322
4/4: [===================================] 100% Time: 00:00:00, Time: 00:00:00
Finished in 0.01380s
4 tests, 7 assertions, 0 failures, 0 errors, 0 skips
但永远不要真正接触 Sidekiq 队列。当 Sidekiq 关闭时我也会变绿,这是我不想要的。当然 运行 在控制台队列被咬了。
如何指定在测试模式下真正命中队列?
使用像 ActiveJob 这样的 API 的原因是允许您将代码写入抽象 API 以便您可以更改适配器。换句话说,您的 ActiveJob classes 应该能够从 Sidekiq 迁移到 Que,而无需对您的代码进行任何更改。正因为如此,ActiveJob::TestCase uses a test adapter 这使得断言工作行为更容易。
就是说,如果您真的想让您的作业进入 运行 队列,您应该相应地配置您的测试环境并继承不使用 [=16] 的测试 class =].
在 Rails 4.2 我有以下 ActiveJob 测试:
test/jobs/import_job_test.rb
require 'test_helper'
class ImportJobTest < ActiveJob::TestCase
def setup
@response = ImportJob.perform_later "'testing Sidekiq queue jobs'"
end
test "enqueued jobs" do
assert_enqueued_jobs 1
clear_enqueued_jobs
assert_enqueued_jobs 0
end
test "ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper" do
assert_equal ["'testing Sidekiq queue jobs'"], @response.arguments
end
test "a second new job has been enqueued with the given arguments" do
assert_enqueued_jobs 1
assert_enqueued_with(job: ImportJob, args: ["'queuing a second job'"], queue: 'default') do
ImportJob.perform_later "'queuing a second job'"
end
assert_enqueued_jobs 2
end
end
运行 测试变绿:
$ rake test test/jobs/import_job_test.rb
Started with run options --seed 35322
4/4: [===================================] 100% Time: 00:00:00, Time: 00:00:00
Finished in 0.01380s
4 tests, 7 assertions, 0 failures, 0 errors, 0 skips
但永远不要真正接触 Sidekiq 队列。当 Sidekiq 关闭时我也会变绿,这是我不想要的。当然 运行 在控制台队列被咬了。
如何指定在测试模式下真正命中队列?
使用像 ActiveJob 这样的 API 的原因是允许您将代码写入抽象 API 以便您可以更改适配器。换句话说,您的 ActiveJob classes 应该能够从 Sidekiq 迁移到 Que,而无需对您的代码进行任何更改。正因为如此,ActiveJob::TestCase uses a test adapter 这使得断言工作行为更容易。
就是说,如果您真的想让您的作业进入 运行 队列,您应该相应地配置您的测试环境并继承不使用 [=16] 的测试 class =].