JestのmaxWorkersをコマンドラインから確認する
こんにちは😃、 CX事業本部のmorimorikochanです。
年末年始はひたすら実家でダラダラしてました。
今回は、Jestでテストを並列実行させるためにmaxWorkers
を機械的に取得する必要があったので調べてまとめてみました。
先に結論
# あらかじめjqのインストールが必要です npx jest --showConfig | jq .globalConfig.maxWorkers # `npm run`経由なら`--silent`が必要です npm run test --silent -- --showConfig | jq .globalConfig.maxWorkers
私の環境では、7
と出力されました。これは同時に、私のローカルマシンではコア数が8であることも表してます
maxWorkersとは
Jestが実行される際、Jestは複数あるテストファイルを効率よく処理するため、並列にテストを実行します。
そのために、ワーカー(worker
)が作成され、各ワーカーがテストファイルを順次実行していきます。
JestのオプションであるmaxWorkers
は、このワーカーの最大数を制限することができるオプションです。
デフォルトではこのmaxWorkers
は以下のような設定になっています。
- ファイルの変更をwatchしない場合、
{マシンで使用可能なコア数}-1
- ファイルの変更をwatchする場合、
{マシンで使用可能なコア数の半分}
どういう場面で役立つ?
例えば、Jestの実行前にワーカー数分だけ外部環境(データベースやオブジェクトストレージ)を用意しないといけない場合に役立ちます。
用意する外部環境の数をハードコードしてしまうと、開発者によってコア数が異なる場合にうまく動作しなくなります。かといってユーザーごとにenvファイルなどで設定するのは面倒です。
そのような場合に、上記コマンドを使って自動で外部環境を用意できると良いでしょう
maxWorkerCount=`npm run test --silent -- --showConfig | jq .globalConfig.maxWorkers` for i in $(seq 1 $maxWorkerCount); do echo "awsome prepare command in $i" done
環境
- Jest: 26.6.3