2015-02-25 5 views
0

On Rails 4.2 я следующий тест ActiveJob:Тестирование ActiveJob с MiniTest не попала очередь нужно Sidekiq

тест/Работа/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 выключен, чего я не хочу. Конечно, запуская консоль, очередь укушена.

Как я могу указать, чтобы ДЕЙСТВИТЕЛЬНО попасть в очередь в тестовом режиме?

ответ

1

Причина использования API, такого как ActiveJob, позволяет вам писать свой код в абстрактный API, чтобы вы могли изменять адаптеры. Другими словами, ваши классы ActiveJob должны иметь возможность перемещаться из Sidekiq в Que без внесения каких-либо изменений в ваш код. Из-за этого ActiveJob :: TestCase uses a test adapter упрощает утверждение поведения работы.

При этом, если вы действительно хотите, чтобы ваша работа попала в запущенную очередь, вы должны соответствующим образом настроить свою тестовую среду и наследовать от тестового класса, который не использует ActiveJob :: TestHelper.

Смежные вопросы