ts-jest:将'@'字符映射到/ src文件夹

时间:2019-11-29 15:58:04

标签: javascript node.js typescript jestjs ts-jest

我有一个带有打字稿的节点项目,并且在tsconfig.json文件中配置了以下路径:

    "paths": {                                /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
      "@project/*": ["./../*"],
      "@*": ["./*"],
    },

我的配置文件位于/ project文件夹,我的源文件位于/ project / src

工作正常,并且正确地将@ xxx / yyy映射到src / xxx / yyy,将@ project / package.json映射到/project/package.json

我正在尝试使用ts-jest实现相同的目的,我尝试在我的jest.config.js文件中使用以下moduleNameMapper:

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  roots: ['<rootDir>/src/'],
  modulePathIgnorePatterns: ['<rootDir>/dist/', '<rootDir>/build/'],
  testMatch: ['**/*.spec.ts'],
  moduleNameMapper: {
    "^\@(.*)": "<rootDir>/src/$1",
  }
}

但是出现以下错误:

 FAIL  src/lib/error/BaseError.spec.ts
  ● Test suite failed to run

    Configuration error:

    Could not locate module @babel/code-frame mapped as:
    C:\data\devel\apps\sgte-it\coordinacion\juridicos\wspjn\src\babel/code-frame.

    Please check your configuration for these entries:
    {
      "moduleNameMapper": {
        "/^@(.*)/": "C:\data\devel\apps\sgte-it\coordinacion\juridicos\wspjn\src\$1"
      },
      "resolver": null
    }

      at createNoMappedModuleFoundError (node_modules/jest-resolve/build/index.js:501:17)

另一方面,如果我这样将每个文件夹映射到/ src:

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  roots: ['<rootDir>/src/'],
  modulePathIgnorePatterns: ['<rootDir>/dist/', '<rootDir>/build/'],
  testMatch: ['**/*.spec.ts'],
  moduleNameMapper: {
    "@db/(.*)": "<rootDir>/src/db/$1",
    "@lib/(.*)": "<rootDir>/src/lib/$1",
    "@modules/(.*)": "<rootDir>/src/modules/$1",
    "@services/(.*)": "<rootDir>/src/services/$1"
  }
}

工作正常,但是我必须使用添加的每个新根文件夹对其进行更新。

有没有推荐的标准方法来实现这种目标?我想要一个特殊字符(在本例中为@)指向我的/ src /文件夹。

也尝试将'@'替换为'$',但也有其他错误...

1 个答案:

答案 0 :(得分:0)

我可以解决它,但不能使用@符号,我必须使用$,而且必须将其转义并用方括号括起来,如下所示:

tsconfig.json:

    "paths": {                                /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
      "$project/*": ["./../*"],
      "$*": ["./*"],
    },

jest.config.js:

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  roots: ['<rootDir>/src/'],
  modulePathIgnorePatterns: ['<rootDir>/dist/', '<rootDir>/build/'],
  testMatch: ['**/*.spec.ts'],
  moduleNameMapper: {
    "^[\$]project/(.*)": "<rootDir>/$1",
    "^[\$](.*)": "<rootDir>/src/$1",
  }
}

我希望这可能对其他人有用,配置所有这些小细节确实是一件痛苦的事...


该死,我几乎都能正常工作(ttsc和ts-jest可以正常工作),但是vscode不能识别映射为'$'的导入,但是可以很好地使用'@'...