如何为Jest定义自定义TS路径?

af7jpaap  于 2023-11-15  发布在  Jest
关注(0)|答案(1)|浏览(174)

我有一个带有多个应用程序(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文件中定义的这些路径?

snz8szmq

snz8szmq1#

您需要使用jest的moduleNameMapper来告诉jest如何相对于rootDir解析@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",
  "moduleNameMapper": {
    "@monorepo-shared/enums": ["<rootDir>/../../monorepo-shared/enums/index"],
    "@monorepo-shared/constants": ["<rootDir>/../../monorepo-shared/constants/index"],
    "@monorepo-shared/interfaces":["<rootDir>/../../monorepo-shared/interfaces/index"]
  }
},

字符串

相关问题