我有一个带有多个应用程序(Angular和NestJS)的monorepo,它们共享一些东西,如接口,枚举等。应用程序工作,Jasmine测试与Angular应用程序工作,但我在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
中,我定义了我的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"
},
型
我已经尝试了很多the solutions in this question,到目前为止都没有正确的。我需要做什么更改才能让Jest看到我在tsconfig.json
文件中定义的这些路径?
1条答案
按热度按时间snz8szmq1#
您需要使用jest的
moduleNameMapper
来告诉jest如何相对于rootDir
解析@monorepo-shared/enums
。字符串