0

基本上,在測試配置設置它在Rails 4中的工作方式(交付方法設置爲測試等)之外,除了已替換的棄用選項外,郵件僅發送與deliver_now,而不是deliver_later。 Deliver_later在開發環境中工作,即使兩個環境中的配置相同。稍後在Rails 5中的測試環境中不能工作

測試環境配置郵件:

config.action_mailer.delivery_method = :test 
config.action_mailer.perform_deliveries = true 
config.action_mailer.perform_caching = false 
config.action_mailer.raise_delivery_errors = true 
config.action_mailer.default_url_options = { :host => 'localhost:3000' } 
+0

你試過設置'active_job.queue_adapter'嗎?來自'test.rb'的 – Aleksey

+1

評論:測試傳遞方法將已發送的電子郵件累積到ActionMailer :: Base.deliveries數組中。那麼你爲什麼要讓他們被髮送? – Aleksey

回答

1

我有同樣的問題,我已經不是訴諸使用斷言在

enqueued_jobs.size 

堅持我的郵件已排隊。此外,我在郵件類中使用deliver_now進行單元測試。

這需要包括ActiveJob:TestHelper

class ActiveSupport::TestCase 
    include ActiveJob::TestHelper 
end 
+0

謝謝一堆。該項目是在後臺和軌道5分支變得陳舊,但當我回到重新審視它應該讓一切都過去了。 –

0

用於測試使用deliver_later(活動作業)的電子郵件另一種選擇是把現在執行您想要的代碼(不排隊),並在perform_enqueued_jobs塊的斷言。這還需要在測試文件的頂部添加一個包含在類定義下方的測試文件頂部

include ActiveJob::TestHelper 

然後如下所示。

perform_enqueued_jobs do 
    post article_url, params: { article: { title: "Learn Testing", body: "Lorem Ipsum" } } 
    assert_not_equal 0, ActionMailer::Base.deliveries.size 
end 
相關問題