Jest PR

【解決:Jestエラー】Consider running Jest with `–detectOpenHandles` to troubleshoot this issue.

記事内に商品プロモーションを含む場合があります

今回はJestのエラーに当たって、解決したため備忘録を残します

This usually means that there are asynchronous operations that weren’t stopped in your tests. Consider running Jest with --detectOpenHandles to troubleshoot this issue.

フロントエンド開発入門 プロフェッショナルな開発ツールと設計・実装

エラーの原因(Consider running Jest with `–detectOpenHandles` to troubleshoot this issue.)

これは『–detectOpenHandlesオプション』を利用すると、メインスレッドが完了するまで待ちます。

しかし、Jestを正常終了していないとエラーになります。

エラーの主な原因は2つ

原因1. –detectOpenHandlesオプションを利用している

原因2. –runInBandオプションを利用している

これはどちらも『detectOpenHandles』を用いているため、エラーが起きます

エラーの解決方法

原因1. –detectOpenHandlesでエラーの場合

これはオープンしているハンドラをクローズしてあげればいいため、終了オプションを追加してあげれば解決します。

強制的に終了する下記のオプションを入れることによって、解決します

--forceExit

https://jestjs.io/docs/ja/cli#–forceexit

原因2. –runInBandでエラーの場合

–runInBandオプションも、暗黙的に–detectOpenHandlesオプションが実行されているため、–forceExitを追加することで解決します。

しかし、forceExitではエラーの場合でも強制終了してしまうため、終了させたくない何かしらの処理を挟みたい場合はなどは異なる手を打つ必要があります。

–runInBandはJestのテストを逐次処理するためのオプションで、このオプションを利用する意図は、テストを順番に実行したいということであるため同じ動作をする『–maxWorkers』オプションでも行うことができます。

--maxWorkers=1

https://jestjs.io/docs/ja/cli#–maxworkersnumstring

–maxWorkers=1にすると、同時に立ち上がるスレッド数を1つにすることができるため、結果的に逐次処理(直列処理)になります。

このオプションではdetectOpenHandlesオプションが利用されないため、原因1でも対処できます