我有一个包含多个应用程序(Angular 和 NestJS)的 monorepo,它们共享一些东西,例如接口、枚举等。这些应用程序可以工作,并且 Angular 应用程序的 Jasmine 测试也可以工作,但是我在 NestJS 应用程序中的 Jest 测试无法导入共享 monorepo 文件夹中的任何内容。
这是我的文件夹结构:
my-repo/
├── ng-ui-1/
├── ng-ui-2/
├── nest-api/
│ ├── src/ (folder w/ app code)
│ ├── tsconfig.json
│ ├── tsconfig.build.json
│ ├── (etc...)
├── monorepo-shared/
│ ├── enums/
│ │ ├── *.enum.ts files
│ ├── interfaces/
│ │ ├── *.interface.ts files
在所有打字稿应用程序中,我已将其添加到我的tsconfig.json
文件中,并且效果很好
{
"compilerOptions": {
//...
"paths": {
"@monorepo-shared/constants": ["../monorepo-shared/constants/index"],
"@monorepo-shared/enums": ["../monorepo-shared/enums/index"],
"@monorepo-shared/interfaces":["../monorepo-shared/interfaces/index"]
}
}
}
在 TS 文件中,我只需添加它即可从这些共享文件夹中导入某些内容,同样,除了 Jest 测试之外,这在任何地方都可以正常工作。
import { BrandingTypeEnum } from '@monorepo-shared/enums';
当我运行 Jest 测试时,出现此错误
Cannot find module '@monorepo-shared/enums' from 'account/account.controller.spec.ts'
在我的package.json
I 中定义 Jest 设置。我知道我需要以某种方式将其指向事实,@monorepo-shared/enums
因为由于某种原因它无法推断出这一点,但到目前为止我尝试过的一切都不正确。
"jest": {
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"moduleDirectories": [
"node_modules",
"@monorepo-shared/constants",
"@monorepo-shared/enums",
"@monorepo-shared/interfaces",
],
"rootDir": "src",
"testRegex": ".*\\.spec\\.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"collectCoverageFrom": [
"**/*.(t|j)s"
],
"coverageDirectory": "../coverage",
"testEnvironment": "node"
},
我已经尝试了这个问题的许多解决方案,但到目前为止没有一个是正确的。我需要更改什么才能让 Jest 看到我在tsconfig.json
文件中定义的这些路径?
您需要使用 jest 来告诉 jest如何
moduleNameMapper
解决. 像这样的事情应该做@monorepo-shared/enums
rootDir