Open1
【Jest】Jest did not exit one second after the test run has completed.エラーの解決方法📝

Jest did not exit one second after the test run has completed.エラーの解決方法📝
エラー内容📝
Jest did not exit one second after the test run has completed.
This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with --detectOpenHandles to troubleshoot this issue.
原因
Jestがテスト実行完了後すぐにプロセスを終了せず、「1秒経ってもJestが終了しない」というメッセージが表示される場合は、テスト内で使われた非同期処理などが完全にクリーンアップされていない可能性が高いです。
たとえば、以下のようなケースが考えられます。
- テスト中に開いたソケットやDB接続を閉じていない
- setTimeout, setInterval などのタイマーをクリアしていない
- ストリームやサブスクリプションなどを購読したままにしている
- 非同期のコールバックが完了していない (Promiseやコールバックがresolve/rejectされていない など)
原因箇所の特定方法📝
エラーメッセージにもあるように、--detectOpenHandles オプションを使うと、テスト実行後にどのような“開いたハンドル”(非同期処理)が残っているかをJestが検知してレポートしてくれます。
[Jest実行コマンド] --detectOpenHandles
解決方法
原因箇所の特定したら、それに応じた対応をします📝
1. クリーンアップ処理がないことが原因の場合
テストで使われている非同期処理・接続などは、すべて終了させる必要があります。
例えば、
- DBや外部APIとの接続を afterAll() などで切断する。
- setTimeout, setInterval を使った場合は clearTimeout, clearInterval で必ずクリーンアップする。
- イベントリスナーやストリーム、WebSocketなどを使用したら、テスト終了時に閉じる。
2. Promiseの取り扱いが原因の場合
非同期コードでPromiseを返している場合、必ずawaitして完了を待つか、テストの最後までにresolve/rejectされるようにします。
Jestで非同期テストを書く場合は async/await か、あるいはテストの最後に.then / .catch をつけるなどして、テストがきちんと終了するようにしてください。