0

基本的には、テスト設定で、Rails 4でどのように動作していたのか(配信方法はテストなどに設定されています) deliver_nowで、deliver_laterではありません。 Deliver_laterは、2つの環境間で設定が同じであっても、開発環境で動作します。後で配信するのは、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'を設定しようとしましたか? – Aleksey

+1

from 'test.rb'コメント::テスト配信メソッドは、送られた電子メールを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 
関連する問題