Как на самом деле работает тестирование 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 раньше.


person Asarluhi    schedule 10.12.2016    source источник


Ответы (1)


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

person Mike Perham    schedule 10.12.2016
comment
Спасибо. Я полагаю, что поддельный режим может тестировать 1, а встроенный режим может тестировать 4. Будучи новичком, я не знал бы, как режим отключения может тестировать 2, и как я могу выполнить ручное тестирование для 3. - person Asarluhi; 10.12.2016