TL;DR

  • RSpec で FooJob.perform_later が非同期で起こす副作用を確かめたいときは、perform_enqueued_jobs を使う。
  • perform_enqueued_jobs は RSpec ではなく、Active Job の ActiveJob::TestHelper が提供するメソッドである。

内容

あるクラスの処理の中で、FooJob.perform_later によってジョブを非同期に実行することがある。そのままテストを実行すると、RSpec は非同期で実行されたジョブの完了を待たないので、期待した結果が返ってこない。記事には次のように書かれている。

何らかのクラスの処理の中で FooJob.perform_later が非同期で起こす副作用を確認したいこともあるかもしれない。
そのまま実行しても非同期で実行されたジョブはRSpecがその処理を待ってくれず、期待した結果が返ってこない。
その時は perform_enqueued_jobs を使うと良い。RSpecではなく、ActiveJob::TestHelper のメソッドである。

キーワード

関連