2017-05-17 7 views
0

私の現在のプロジェクトでは、統合テストで多くのコードがコメントアウトされていることに気付きました。多くを変更しましたActiveJobperform_laterperform_nowを呼び出してスピード上の理由でassert_enqueued_jobsは今実行されたジョブをキャッチできません。Railsで `perform_now`ジョブをテストするにはどうすればいいですか

assert_performed_jobsも試してみましたが、うまくいきませんでした。

誰でも私に洞察力や提案を与えてテストすることはできますか?それともテスト可能ではありませんか?

答えて

1

Untestable?決して!

assert_enqueded_jobsは実際にコードをテストするのではなく、何かが実際に後で発生するようにエンキューされているかどうかをチェックしています。すぐに何か問題が発生した場合、それがエンキューされたことをテストするのはなぜですか?

キューを維持し、ActiveJob::TestHelpersの他のものを使用して強制的にジョブの実行/クリアを試みます。しかしそれだけで私には違いはありません。

https://apidock.com/rails/v4.2.1/ActiveJob/TestHelper/assert_enqueued_jobs

は、あなたの仕事はちょうどActiveJob#perform_nowを呼び出し、ActionMailer::Base.deliveries.countをチェックし、いくつかの電子メールを送信することだったと言います。この時点で、実際のテストは非常に仕事に合わせて調整されます。

Notificationを作成していて、Notification.countが変更されたと主張できます。

主なことは、ジョブがエンキューされ、ストーリーが終了したことを確認する代わりに、そのジョブの実行中の望ましい結果を探していることです。

+0

説明をいただきありがとうございます –

関連する問題