Я сейчас пытаюсь обновить части нашего приложения до 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» и «запуск script / delayed_job». Ни один не решить проблему.