в delayed_job вызываются ли хуки, когда Delayed :: Worker.delay_jobs имеет значение false? - PullRequest
3 голосов
/ 29 июля 2011

Я использую colleideidea / delayed_job .В моих тестах RSpec хуки [: before,: after,: success] вызывались не так, как я ожидал.

Когда Delayed::Worker.delay_jobs = true (по умолчанию), я вижу, как вызывается хук enqueue() и ничего более.Это поведение, которое я ожидаю, так как нет отдельной задачи, обрабатывающей задания.

Но когда Delayed::Worker.delay_jobs = false, как рекомендовано для тестирования документами, я вижу, как вызывается мой метод process (), но ни один изкрючки.

Если это не ожидаемое поведение, какие-либо предложения о том, что я делаю неправильно?(Я могу легко включить код.) Если это ожидаемое поведение, то какова стратегия тестирования хуков?

[Примечание: каталог спецификаций для delayed_job, в частности performable_method_spec tests предположим, что вы можете установить Delayed::Worker.delay_jobs = false и по-прежнему получать обратные вызовы для ваших хуков.Но эти тесты используют конструкцию obj.delay.method вместо Delayed::Job.enqueue(object_with_a_perform_method) для постановки задачи в очередь.Будет ли это иметь значение?]

[Обновление: я пробовал как форму obj.delay.method, так и форму Delayed::Job.enqueue(obj_with_a_perform_method) - я не вижу, чтобы в любом случае вызывались хуки.] *

1 Ответ

0 голосов
/ 09 августа 2011

На странице colleideidea / delayed_job github я обнаружил ту же самую ошибку, описанную, исправленную и исправленную.Предположительно, обновленная версия delayed_job решит проблему.

Обновление: я нашел обходной путь, отличный от извлечения последней версии.Вы можете явно вызвать метод Delayed :: Job worker.Он будет обрабатывать элементы в очереди - в том же потоке, что и тесты, конечно - но вызовы обратного вызова действительно вызываются:

[successes, failures] = Delayed::Worker.new.work_off
...