先に結論だけ
表題のエラーが出た場合、ts-jest用の単体テストファイルが配置してあるディレクトリに新たなtsconfig.jsonを追加し、includeとexcludeフィールドを上書きします。
▼__test__/tsconfig.json
{
"extends": "../tsconfig.json",
"include": ["./", "../src"],
"exclude": []
}
はじめに
この記事は、IntelliJ IDEA系列のIDEでts-jest用のファイルに警告が発生する問題を記録、共有するためのものです。
想定する読者
- IntelliJ IDEA系列のIDEを使っている
- ts-jestを使っている
- 単体テストファイルをTypeScriptで書いている
この問題はIntelliJ IDEA系列のIDE固有のものです。
想定する環境
- WebStorm 2023.2
- TypeScript 5.1.6
- jest 29.5.0
- ts-jest 29.1.0
対象となるアプリやパッケージのバージョンが変わると、記事の内容がそのまま適用できないかもしれません。記事を読む前に、お手元の環境をご確認ください。
問題と再現方法
プロジェクトにTypeScriptとts-jestをインストールします。
npm install --save-dev jest typescript ts-jest @types/jest
プロジェクトのルートディレクトリにtsconfig.jsonを配置します。
{
"compilerOptions": {
"baseUrl": "./",
},
"include": ["src/**/*"],
"exclude": ["node_modules", "__test__"]
}
__test__
ディレクトリを作成し、test.spec.ts
を配置します。
この段階で問題
ウィンドウにFile is not included in any tsconfig.json
という警告が表示されます。警告が表示されるだけで、ts-jestの単体テストは正常に完了します。
解決方法
この警告は単体テストの動作には影響しませんが、問題ウィンドウの見通しが悪くなります。警告が表示されないように設定ファイルを追加します。
問題の原因
この問題は、tsconfig.jsonの設定で
- テストファイルが
include
の範囲から外れている - テストファイルが
exclude
で除外されている
のいずれかで発生します。
上記の再現例では
-
src
ディレクトリだけをincludeしている -
__test__
ディレクトリをexcludeしている
ために__test__/test.spec.ts
がtsconfigの対象外になっています。
IntelliJ IDEAのエラーチェック
IntelliJ IDEA系統のIDEやVisual Studio Codeは、編集中のTypeScriptファイルからもっとも近いtsconfig.jsonを参照してエラーをチェックしています。
この動作は、tscコマンドの動作にしたがっています。tscコマンドを--project
オプションなしで実行した場合、TypeScriptコンパイラーはディレクトリを遡ってもっとも近いtsconfig.jsonを探します。
IntelliJ IDEA系統のIDEはこの動作に従い、単体テストファイルをチェックします。単体テストファイルがincludeもしくはexcludeの範囲に入っていないため、tscコマンドを実行してもトランスパイルされないという警告を表示します。Visual Studio Codeも同じようにエラーをチェックしていますが、この件については警告を表示しません。
テストディレクトリにtsconfig.jsonを追加する
ts-jestで利用する__test__
ディレクトリー内のエラーのみを修正したい場合、このディレクトリに新たなtsconfig.jsonを追加します。
{
"extends": "../tsconfig.json",
"include": ["./", "../src"],
"exclude": []
}
__test__/tsconfig.json
を追加し、includeとexcludeフィールドを上書きします。これでIDE上での警告が消えます。
__test__/tsconfig.json
は__test__
ディレクトリ内でtscコマンドを実行するか、--project
オプションを指定しない限りトランスパイルには利用されません。プロジェクトに影響を与えず警告だけを消せます。
以上、ありがとうございました。