Watchman が原因で Jest でテストを実行しても動かない場合の対応方法
この記事は,マイナビ Advent Calendar 2019 1日目の記事となります.
前回,Jest と Puppeteer に入門するという記事を書いたが,その記事を書く過程でテストが上手く動かず,詰まってしまったのでどう対応したのかをまとめておく.
Jest でテストを実行しても動かない
作った E2Eテストを jest
コマンドを実行したところ,Determining test suites to run...
の表示で止まってしまい,テストが終わらない現象が発生した.
$ jest ./sum.test.js Determining test suites to run...
原因
公式リポジトリの issues を色々見てみたところ(結構奥深くまで見たので大変だった...) ,自分の PC に「Watchman」というライブラリがインストールされていることが原因で Jest が動かないという issue を見つけた.
「インストールした覚えが無いので,流石にこれではないだろう」と思いながらコマンドを確認してみた所,実はインストールされていたことがわかった.
$ which watchman /usr/local/bin/watchman
解決方法
解決方法は簡単で,brew uninstall watchman
を実行し,Watchman を削除すれば, jest
コマンドが動くようになった.
$ brew uninstall watchman Uninstalling /usr/local/Cellar/watchman/4.9.0_3... (23 files, 2MB) $ jest ./sum.test.js PASS ./sum.test.js ✓ adds 1 + 2 to equal 3 (4ms) Test Suites: 1 passed, 1 total Tests: 1 passed, 1 total Snapshots: 0 total Time: 1.172s Ran all test suites matching /.\/sum.test.js/i.
Watchman とは?
「さぁこれで解決解決〜」と思って終わりにしようとしたが,そもそも Watchman とはどんなライブラリなのかを軽く調べてみた.
Watchman とは Facebook が開発したファイル/フォルダ監視ツールで,指定したファイルが変更されたら,それをトリガーに何らかのアクションを設定できるツールであることがわかった.
なぜ自分が Watchman をインストールしたのかを思い出してみたところ,過去に React Native を勉強してみようと思い,公式チュートリアルに沿って進めていたところ, Watchman をインストールする内容があり,その時にインストールしたことを思い出した.
今は React Native を触る機会が無いため Watchman をアンインストールをして解決したが,React Native のテストを Jest で書いている人は何らかの回避方法が必要であると思った.
この回避方法までは今回は調べないが今後 React Native を触る機会があれば検討する必要がある(すでに回避方法がありそうではあるが...).
まとめと所感
今回は Jest でテストを実行したのに動かない場合の原因の一つについてまとめてみた.今回はそれらしいエラー文がコンソール上に表示されなかったので原因がわかるのに想定以上に時間が掛かった.
詰まったら,とりあえず公式のリポジトリを見に行く習慣はこの調子でやっていきたい.