2016-03-17 5 views
0

Я хочу написать тест, чтобы проверить, выполнены ли задания. Это выглядит, как показано ниже:Работы не выполняются. Ruby on Rails

тест/Работа/send_remember_email_job_test.rb

test "remember method was sent" do 

    assert_performed_jobs 0 

    assert_enqueued_jobs 1 do 
    SendRememberEmailJob.perform_later('[email protected]', 0) 
    end 

    assert_performed_jobs 1 

end 

приложение/работа/send_remember_email_job.rb

class SendRememberEmailJob < ActiveJob::Base 
    queue_as :default 

    def perform(email,time, task) 
    UserMailer.delay(run_at:time.hours.from_now).remember_mail(email,task) 
    end 
end 

Когда я запускаю тест, я всегда получаю 1 отказ:

1 jobs expected, but 0 was performed. 
Expected: 1 
Actual: 0 

Я не знаю, если это поможет, но я использую delayed_job. Спасибо заранее

+0

отложенной вакансии записи в БД в 'delayed_jobs' таблицы, которая имеет' last_error' столбец. Посмотрите его значение и опубликуйте здесь, если это вам не поможет. –

+0

Проверить столбец last_error? Как я полагаю, это делается, когда рельсы не хранят тестовые переменные в базе данных. В разработке все работает нормально, но здесь тесты терпят неудачу. Любая другая идея? – Aleksander

+0

Вы пытались изменить 'SendRememberEmailJob.perform_later ([email protected]il.com ', 0)' to 'SendRememberEmailJob.perform_now ([email protected]', 0)'? –

ответ

0

Проблема может произойти, потому что delayed_jobs run - это задания в фоновом процессе по умолчанию, поэтому ваш тест не будет ждать завершения теста. Попробуйте отключить DelayedJobs, чтобы задания выполнялись в режиме реального времени.

Вы можете сделать это с помощью:

Delayed::Worker.delay_jobs = false 
+0

К сожалению, это не так ... и, кроме того, мой другой тест для проверки выставленных заданий не срабатывает. – Aleksander

 Смежные вопросы

  • Нет связанных вопросов^_^