概要
- jestのwatchモードを発動した際、特に何も変更していないにもかかわらず、再読み込みを繰り返す現象が手元で確認された
- 原因は、MongoDBがバインドマウントされたディレクトリに対してファイルの書き込みを頻繁に行ったことにより、当該ディレクトリの変更をjest側が検知し、結果的に書き込みの頻度に合わせてリロードされたことだった
- jest.config.ts内のwatchPathIgnorePatternsに当該バウンドマウントされたディレクトリを追加し、挙動が修正されたことを確認した
自分用にメモを残しておく。
はじめに
jestのwatchモードを使うとテスト結果をリアルタイムで確認しながらコードが書けて便利で、最近はよく使っている。ある日仕事をしていると、突如 jestのwatchモードが荒ぶるようになった。
具体的には以下のような症状である。
- 変更をしていないのに常に変更が走っているような感じになる
- ファイル名に絞り込んだモードを選んでも、すぐ変更が走ったかのようにrunし始める
なお、上記画像はCursorだが、Mac標準のターミナルでやっても同様の現象が起こった。
原因の切り分け
- CursorではなくWezTermや標準ターミナルでやってみる
- 結果変化せず
- したがってIDEのプロセスが悪さをしているわけではない
rm -rf node_modules
して再インストールする- 結果変化せず
docker prune
する- 結果変化せず
- レポジトリをいったん削除、
git clone
して再セットアップ- 結果変化せず
watchman:false
を試す- 結果変化せず
調べた結果
同僚「docker-compose.yml
の中のバインドマウントされてるディレクトリが怪しいんじゃないの?」
なるほど確かに。
そういうわけで、怪しそうなところを手あたり次第jest.config.ts
内部のwatchPathIgnorePatterns
に入れていく。
mongodbのバインドマウント元のディレクトリを指定したところで例の挙動は終焉した。
学びとしては以下である
- mongodbのバインドマウントディレクトリは
.gitIgnore
で指定されていたが、watchモードはその変化もとらえ続けていた - 無意識のうちに
.gitIgnore
されているディレクトリはwatchの対象外だと思っていたが、別にそんなことはどこにも書いていなかった