Отложенное задание Rails 3 — обновление до Rails 3 прерывает задачи delayed_job

Я пытаюсь обновить части нашего приложения до Rails 3, особенно наши модульные тесты. Я постоянно сталкиваюсь с проблемой, в частности, с отложенными заданиями и почтовыми программами, а именно с тем, что почтовые программы не «отправляются» при запуске теста.

Чтобы проверить отправленные электронные письма, мы запускаем их все через метод «assert_email» в нашем тестовом помощнике, который выглядит примерно так:

def process_delayed_jobs
  while Delayed::Worker.new(:quiet => true).send(:reserve_and_run_one_job) do
    # nothing
  end
end
alias_method :deliver_delayed_emails, :process_delayed_jobs

def assert_emails(number, skip_assertion = false)
  deliver_delayed_emails # start with a clean slate
  if block_given?
    original_count = ActionMailer::Base.deliveries.size
    yield
    deliver_delayed_emails
    new_count = ActionMailer::Base.deliveries.size
    assert_equal original_count + number, new_count, "#{number} emails expected, but #{new_count - original_count} were sent" unless skip_assertion
  else
    assert_equal number, ActionMailer::Base.deliveries.size unless skip_assertion
  end
end

Мы тестируем это так:

assert_emails 2 do
  Model.action_that_sends_mailer
end

Этот код безупречно работает в Rails 2 при запуске delayed_job 2.0.5. На Rails 3 мы используем 2.1.4.

По сути, это терпит неудачу каждый раз, когда мы его тестируем, потому что отправляется «0» электронных писем. Сами почтовые программы обновлены должным образом, и я удалил ошибочный ".deliver" из вызовов методов, чтобы запустить их. Журнал delayed_jobs пуст, поэтому не похоже, что что-то обрабатывается.

Я чувствую, что мне не хватает какой-то ключевой (но простой) синтаксической проблемы. Любая помощь приветствуется.

Изменить: я также должен отметить, что я запустил процесс delayed_job на своем локальном компьютере как с «rails delayed_job start», так и с «script/delayed_job start». Ни решить проблему.


person Kevin Whitaker    schedule 28.11.2011    source источник
comment
Покажите нам, что такое method_call, пожалуйста.   -  person Ryan Bigg    schedule 29.11.2011


Ответы (1)


Оказалось, что-то не связанное с delayed_job.

person Kevin Whitaker    schedule 30.11.2011