0

私の Rails アプリには、ActionMailer を介して電子メールを送信する after_action フックを持つコントローラーがいくつかあります。そのようです:

after_action :send_notifications, only: [:create, :update]

def send_notifications
  case @record.status.downcase
  when 'review', 'corrected'
    RecordNotifier.received(@record).deliver_later

  when 'rejected'
    @rejection = Rejection.where(record_id: @record.id).last
    RecordNotifier.rejected(@record, @rejection).deliver_later

  when 'submitted'
    @form = Form.find( @record.form_id )
    RecordNotifier.submitted(@record).deliver_later
  end
end

私の問題は、スペックの実行後にメーラーが実行を終了する必要がある場合があるため、テストスイートがランダムに失敗することですが、データベースは各テストの後にクリーンアップされるため、メーラーが必要とするオブジェクトはもう存在しません。しかし、それが問題だと確信しています。このように失敗したテストが 1 つありますがsleep 1、最後のexpect(page).to have_somethingステートメントの前に追加したところ、合格しました。ログでも確認できました。アプリの準備が整う前に、データベースがザッピングされていました。

ちなみに、メーラー用の ActiveJob セットアップはありません。ガイドが同じように機能し、後で ActiveJob を追加すると、すでに準備が整っているとのことでしたので、deliver_later を使用しました。

では、どうすればこれを回避できますか? 仕様が終了して DatabaseCleaner が実行される前に、アプリがすべて完了していることを確認するにはどうすればよいですか?

4

0 に答える 0