2016-12-10 6 views
0

Моих Sidekiq рабочие, как на пример ниже:Как работает Sidekiq в режиме отключения?

Class BooksWorker 
    include Sidekiq::Worker  
    def perform 
    books = Book.where(collected: true) 
    books.each do |book| 
     book.update_attribute(:status, "read") 
     book.toggle!(:collected) 
    end 
    end 
end 

Я хотел бы использовать тестирование Sidekiq в отключении режима, чтобы проверить, что:

  1. рабочих места помещёны
  2. Sidekiq взаимодействует с Redis (рабочие места переносятся на Redis)
  3. Задания получены из Redis и выполнены
  4. заданий обеспечивают ожидаемые результаты

Какое испытание я могу создать для проверки всех четырех пунктов выше?
Рассмотрим пример испытания ниже:

require 'test_helper' 
require 'sidekiq/testing' 

class BooksWorkerDisableTest < Minitest::Test 
    def setup 
    configure = -> (config) do 
     config.redis = { url: 'redis://localhost:6379/15' } 
    end 

    Sidekiq.configure_client(&configure) 
    Sidekiq.configure_server(&configure) 
    Sidekiq::Testing.disable! 
    @books = Book.where(collected: true) 
    end 

    test "collected books should be marked as read before archived" do 
    BooksWorker.perform_async 
    @books.each do |book| 
     assert book.status == "read" 
     assert book.collected == false 
    end 
    end 
end 

Если Sidekiq во время теста ставит в очередь на работу, подталкивает к Redis, извлекает его из Redis и выполняет его, сколько времени потребуется для теста должна быть завершена, при условии, что тест закрывается только после выполнения задания?

Вышеуказанный тест проверяет только четвертую точку: как я могу проверить другие точки? Я предполагаю, что только неявное, что, если задания выполняются, то они уже были поставлены в очередь и перенаправлены на Redis раньше.

ответ

1

Ваши тесты должны проверять ваш код, а не Sidekiq. Выполните ручное тестирование, чтобы убедиться, что все включено. disable mode может тестировать 1 и 2, ваши тесты могут напрямую проверять 4. 3 выполняется вручную.

+0

Спасибо. Я предполагаю, что поддельный режим может протестировать 1, а встроенный режим может протестировать 4. Будучи новичком, я не знаю, как отключить режим тестирования 2, и как я могу выполнить ручное тестирование на 3. – Asarluhi