❗
[NestJS + Jest] ユニットテスト時に絶対パスでimportエラー: Cannot find module
概要
エラーを解消してユニットテストをしたい
環境
package.json
"dependencies": {
"@nestjs/common": "^9.0.0",
"@nestjs/config": "^2.2.0",
"@nestjs/core": "^9.0.0",
"@nestjs/platform-express": "^9.0.0",
},
"devDependencies": {
"@nestjs/cli": "^9.0.0",
"@nestjs/schematics": "^9.0.0",
"@nestjs/testing": "^9.0.0",
"@types/express": "^4.17.13",
"@types/jest": "29.2.4",
"jest": "29.3.1",
"ts-jest": "29.0.3",
},
エラー内容
yarn test
すると、Cannot find module エラーがでて先に進まない
FAIL src/tasks/tasks.service.spec.ts
● Test suite failed to run
Cannot find module 'src/users/users.service' from 'tasks/tasks.service.ts'
相対パスでインポートしているモジュールは大丈夫だったが、絶対パスがインポートできていなかった。
解決法
jest 設定ファイルで jest の設定をする。今回は package.json で設定する。
修正点は 2 つ。
-
rootDir
を削除。 -
moduleDiractories
に<rootDir>
を追加。
package.json
@@ -60,7 +60,6 @@
"json",
"ts"
],
- "rootDir": "src",
"testRegex": ".*\\.spec\\.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
@@ -72,7 +71,7 @@
"testEnvironment": "node",
"moduleDirectories": [
"node_modules",
- "."
+ "<rootDir>"
]
}
}
説明
1. rootDir
デフォルトは package.json があるディレクトリ。nest new
で作成したディレクトリ構成のままならデフォルトのままでいいので削除する。
なお、rootDir は jest 設定内では<rootDir>
で参照できる。
2. moduleDirectories
モジュールのインポート先を指定する設定。そこにルートディレクトリを追加する。
それによって絶対パスでインポートできるようになる。
参考記事
Jest + Typescript + Absolute paths (baseUrl) gives error: Cannot find module
Discussion