2014-02-21 26 views
1

使用resque-scheduler將來創建Resque作業,你如何進行單元測試?使用resque-scheduler在Rails中進行單元測試。手動排隊計劃任務?

代碼來排隊的任務:

i = 0 
installed_apps.each_slice(3) do |slice| 
    slice.each do |installed_app_id| 
    Resque.enqueue_in((5*i).minutes, ReinstallApp, installed_app_id) 
    end 
    i = i+1 
end 

代碼所使用的單元測試中手動運行規律救援任務:當作爲一個普通Resque作業排隊

def run_worker_simulation 
    worker = Resque::Worker.new('connection') 
    job = worker.reserve 
    worker.perform(job) 
end 

任務運行正常。問題是這不會運行任何resque-scheduler計劃任務,即使是Resque.enqueue_in(0.minutes,...)。你如何手動運行計劃任務?

+0

當Rails.env =='test' – matkam

回答

1

不是修改代碼,而是對測試環境有一個例外,最好是根據功能構建測試。

我建議只是建立一個測試來檢查以確保Resque收到一個enqueue_in呼叫。假設resque-scheduler將具有足夠的測試覆蓋率通常是安全的,但是,如果您可以對代碼的整體健全性感到滿意,那麼您可以運行該寶石的測試。

+0

時,我結束了使用Resque.enque而不是enqueue_in。但是,如何運行已經使用'enqueue_in'排隊的作業?我無法弄清楚如何圍繞它進行測試。 – matkam

+0

您不會在測試環境中運行作業。你會模擬/存根預期的結果。你*可以*編寫有關後臺工作代碼的測試。 – CDub

+0

如果您使用'mocha'gem,您可以模擬enqueue_in調用,而不是真正調用它:Resque.expects(:enqueue_in).with(... <您期望的參數> ...) –