2016-11-10 73 views
3

我有很多作業使用perform_later調用其他嵌套作業。但是,在黃瓜的一些測試中,我想立即執行那些工作以進行其餘的測試。黃瓜 - 立即執行ActiveJob`perform_later`作業

我認爲這將是足夠的補充

# features/support/active_job.rb 
World(ActiveJob::TestHelper) 

,並在步驟定義文件中使用此調用工作

perform_enqueued_jobs do 
    # call step that calls MyJob.perform_later(*args) 
end 

但是我碰到類似的東西

undefined method `perform_enqueued_jobs' for #<ActiveJob::QueueAdapters::AsyncAdapter:0x007f98fd03b900> (NoMethodError) 

我錯過了什麼/做錯了什麼?

+0

你找到這個問題的答案?我現在正遇到同樣的問題。 – Rystraum

+0

嘿@Rystraum我正在看我的工作代碼,顯然我的測試在步驟中使用'.perform_now',它似乎工作正常。我不相信我必須在任何地方修改隱藏的設置...查看我的回答 –

回答

0

它將只要您撥打.perform_now黃瓜步內,即使有使用.deliver_later內嵌套的工作似乎,它的工作太

#support/active_job.rb 
World(ActiveJob::TestHelper) 

#my_job_steps.rb 
Given(/^my job starts$/) do 
    MyJob.perform_now(logger: 'stdout') 
end 

#jobs/my_job.rb 
... 
MyNestedJob.perform_later(*args) # is triggered during the step 
... 

而且,在我environment/test.rb文件沒寫任何有關ActiveJob的,默認工作正常。我相信測試的默認適配器:inline所以調用.deliver_later_now要不要緊

+0

謝謝!如果您直接測試作業,這是理想的。如果您想繼續在集成級別進行測試(例如註冊應發送電子郵件),我找到了另一種方法。我真的很快在我的博客上寫下了它,當我開始打磨它時,它將作爲一個單獨的答案發布。這裏的鏈接:http://rystraum.com/testing-email-deliveries-using-cucumbercapybaraminitest/ – Rystraum

+0

嘿謝謝,這將是一個很好的補充,雖然電子郵件有點特殊情況。實際上,我自己的用例涉及到調度,但由於「每當」調度在Cucumber中不容易集成,我決定在預定的操作中實際發生的事情寫出一個步驟,並且在該步驟中直接啓動作業更簡單。 –

0

我切換到:測試適配器測試和它的工作對我來說:

# initialisers/test.rb 

config.active_job.queue_adapter = :test 

# features/support/env.rb 

World(ActiveJob::TestHelper)