2016-03-17 50 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

延遲工作寫入DB到'有'last_error'列delayed_jobs'表。看看它的價值,並在這裏發佈,如果它不會幫助你。 –

+0

檢查last_error列?當我不在數據庫中存儲測試變量時,我該如何做到這一點。在開發中一切正常,但在這裏測試失敗。任何其他想法? – Aleksander

+0

您是否嘗試將'SendRememberEmailJob.perform_later('[email protected]',0)'改爲'SendRememberEmailJob.perform_now('[email protected]',0)'? –

回答

0

問題可能會發生,因爲delayed_jobs運行默認是後臺進程中的作業,所以您的測試不會等待它完成測試失敗。 嘗試禁用DelayedJobs,以便作業實時運行。

你可以做到這一點:

Delayed::Worker.delay_jobs = false 
+0

不幸的是,這不是......另外我的另一個檢查入隊作業的測試失敗了。 – Aleksander