Jest で __tests__ フォルダにテスト用ファイルを置いたのに読み込んでくれない(解決)
タイトルの通り
Jest ってのは JavaScript / TypeScript のテストフレームワークです。
テスト実施時に hoge.test.ts
のように拡張子の手前に test
っていう文字列を入れたファイルを用意するか、プロジェクトフォルダの直下に作った __tests__
フォルダの下にテスト用のスクリプトファイルを入れておくと、テストをやってくれます。
くれるはずなんですが・・・うちの環境では __tests__
に入れたファイル読んでくれませんでした。
Jest の設定ファイルである jest.config.js
見てみると、パターンマッチ的にも問題なさそうです。
うーむ。
// The glob patterns Jest uses to detect test files↲ testMatch: [↲ "**/__tests__/*.+(ts|tsx|js)",↲ "**/?(*.)+(spec|test).+(ts|tsx|js)",↲ ]
"**/__tests__/*.+(ts|tsx|js)",↲
ここ。
で、試しにパターンマッチを全部削って ./__tests__/hoge.test.ts
と直接ファイル名を記述したりしたけどダメ。
なぜだ。
まぁ、テスト自体は src/
に入れた hoge.test.ts
を読み込んでくれるので、テストを実施する回避策はあるんですが、納得できない。
納得は全てに優先します、自分のプロジェクトであればなおさら・・・
解決
今回、TypeScript を書くにあたってソースファイルを src/
フォルダの中に入れていたのですが、そのとき Jest の設定を書き換えていました。
以下の設定をコメントアウトして有効にしていました。
// A list of paths to directories that Jest should use to search for files in↲ roots: [↲ "<rootDir>/src",↲ ],↲
はい、ちゃんと書いてますね。
A list of paths to directories that Jest should use to search for files in↲
Jestがファイルを検索する際に使用するディレクトリのパスのリスト↲
この設定が有効になっていると、Jest はファイルを探すときに src
の中しか見ないわけです。
ということで、ここをコメントアウト。
無事、テストを __tests__
フォルダに隔離してもテストを実行してくれるようになりました。
めでたしめでたし。
なんで TypeScript 書いてるん?
Google Apps Script (GAS)で動かすためです。
これまで GAS が提供している Web エディタで書いてきたのですが、そろそろ適切な分割とかモジュールの利用をしないと厳しくなってきました。
GAS、特に Sheet と密接に関わるコードは(モックとか作るの面倒なので)継続してウェブ上のエディタで JavaScript 書いていきます。
しかし、Sheet と関係のないところは、切り出して小さいモジュールを作って良いのではないか?
小さいモジュールなら、実験がてら TypeScript で書いてみてもいいのでは?
と思った次第です。
いまは 2021 年 10 月 1 日に変更された PayPay銀行と三菱UFJ銀行の振込手数料判定プログラムなどを書いています。
手元で TypeScript を書いて、clasp というツールで GAS に反映させています。
TypeScript はなんというか、コンパイルして JavaScript を吐き出すことが迂遠と思っていたのですが、以下の資料を見て認識を改めた次第です
新しい記法を使うが、ブラウザの互換性を維持するコードを書く手法としてコンパイラを使うのが当たり前になってきた
TypeScript については環境構築や、どのツールを使えばいいのかもわからないというのが正直なところですが、とりあえず Web+DB の TypeScript 特集とかみながら試行錯誤中です。
なぜこんな小ネタを?
普段から Perl 入学式で「わからなかったところをブログとかに残しておくと、数年後の自分が面白い」と言ってることもあり、数年後の自分を楽しませるため
ググっても同じようなネタで苦しんでる人がいなかったため(StackOverFlow にいたけど、ちゃんとした回答ついてなかった)