はじめに
Jestでテストを実行した際に、「Jest did not exit one second after the test run has completed.」というエラーに遭遇しました。このエラーは、テストが正常に終了しているにも関わらず、Jestプロセスが終了せずに残ってしまうことを示しています。今回はこちらのエラーの解決策をご紹介します。
この記事は個人的なアウトプットを目的として作成したものです。そのため、誤った情報や不足している内容が含まれている可能性があります。もし間違いや気になる点がございましたら、ぜひご指摘いただけますと幸いです。
原因
このエラーは、主に非同期処理が原因で発生します。async/awaitなどの非同期処理が適切に終了していない場合、Jestは全てのテストが完了したと判断できずに、このエラーを表示します。
解決策
"test": "jest --runInBand --detectOpenHandles --forceExit"
このようにscriptsにオプションを設定することで、エラーが解消されます。
各オプションの意味
--runInBand
並列実行を無効にし、テストを順番に実行します。並列実行による競合や、デバッグ時の追跡しやすさのためにこのオプションを追加します。
--forceExit
全テストが終了した後にJestを強制的に終了します。
--detectOpenHandles
estが何も出力せずに終了するのを防ぎます。--forceExitを使用する場合、こちらもセットで必要です。
終わりに
一時的な解決策として上記オプションを追加する方法もありますが、根本的には非同期処理の書き方を見直す必要があります。async/await を利用した書き方にすることで、非同期処理の制御がより容易になり、この種のエラーを減らすことができます。
参考