1

在 Rails 4.2 上,我有以下 ActiveJob 测试:

测试/工作/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 关闭时,我也会变绿,这是我不想要的。当然在控制台中运行队列被咬了。

如何指定在测试模式下真正进入队列?

4

1 回答 1

1

使用像 ActiveJob 这样的 API 的原因是允许您将代码写入抽象 API,以便您可以更改适配器。换句话说,您的 ActiveJob 类应该能够从 Sidekiq 移动到 Que,而无需对您的代码进行任何更改。因此,ActiveJob::TestCase使用了一个测试适配器,可以更轻松地断言作业行为。

也就是说,如果您真的想让您的作业进入运行队列,您应该相应地配置您的测试环境并从不使用 ActiveJob::TestHelper 的测试类继承。

于 2015-02-25T16:26:26.247 回答