2014-11-28 2 views
0

Я использую sidekiq для очереди задания для проверки ввода поля на модели (ссылку) и перейдите по ссылке, чтобы убедиться, что она не возвращает 404, если она проходит регулярное выражение.Работник Sidekiq не получает очереди в тестировании

Если проверка регулярного выражения проходит и ссылка не возвращается 404, я назначаю другой атрибут той же модели, но в другом поле.

Работник триггера, вызывая метод, метод вызывается после after_commit, on: :update обратного вызова

Метод срабатывает только работника, если «previous_changes [» объект JSON Я использую, чтобы внести изменения «]» истинно. Это значит, что работник не будет продолжать называться снова и снова.

Все это прекрасно работает в разработке, подтверждено многочисленными прецедентами по QA'ing это сам

Я пытаюсь написать тест в MiniTest, чтобы убедиться, что работник получает в очереди, когда поле в формате JSON модели изменяется но рабочий не ставится в очередь, и для жизни я не могу понять, почему.

Я тестирую ожидания для работника в очередь с:

assert_difference 'WorkerClass.jobs.size' do 
    site = sites(:site_from_fixtures) 
    site.attribute_that_triggers_change = { "random" => "json_object" } 
    site.save 
end 

Тест возвращений: "Ожидаемый: 1, Actual: 0"

Любой входной сигнал был бы весьма признателен!

+0

Пробовал использовать 'save!' Только для того, чтобы узнать, возможно ли это ошибка проверки (я должен получить другое сообщение об ошибке, которое ожидалось: 1, фактическое: 0, если это была проблема проверки) и не работает:/ Если я обновляю одну и ту же запись в консоли rails (загрузка консоли с RAILS_ENV = тестовые рельсы c) рабочий работает в sidekiq ... Что здесь происходит ?! – NomNomCameron

ответ

1

Эта проблема была устранена путем установки драгоценного камня test_after_commit.

Очевидно, after_commit не срабатывает в тестах, если вы не используете этот камень или не указываете необходимые изменения в test_helper. Я выбрал вариант с драгоценными камнями, чтобы немного облегчить ситуацию.