我有一个 typescript 项目,我在 ts.config.json 中设置了别名
{
"compilerOptions": {
"paths": {
"@pkg/*": ["./packages/*"],
},
}
}
在我的 ts 文件中,我可以缩短导入路径// example.ts
import {someThing} from '@pkg/mypackage'
它适用于 tsc
并且 vscode 可以正确识别别名路径。但是当我运行
npm t
惠特跑jest
它失败Cannot find module '@pkg/mypackage' from 'example.ts'
jest.config.jsmodule.exports = {
preset: "ts-jest",
testEnvironment: "node",
transform: {
"^.+\\.tsx?$": "ts-jest",
},
};
我将此添加到我的 package.json 文件中"jest": {
"moduleNameMapper": {
"@pkg/(.*)": "<rootDir>/packages/$1"
}
}
我设法使用了pathsToModuleNameMapper
,但我有这个问题https://github.com/kulshekhar/ts-jest/issues/2709
最佳答案
我遇到了同样的问题,但通过使用几个插件设法让它工作。最后我还有一些额外的匹配器用于一些额外的测试类型。
我的 Jest-base.config.js 安装并运行了 tsconfig-paths-jest 插件。这个插件解决了我的 tsconfig 路径问题。
我在单元测试和端到端测试之间使用通用基础文件进行通用配置,目前这两个测试都是通过 Jest 运行的。
jest-base.config.ts
const tsconfig = require('./tsconfig.json');
const moduleNameMapper = require('tsconfig-paths-jest')(tsconfig);
module.exports = {
moduleNameMapper,
preset: 'ts-jest',
testEnvironment: 'node',
rootDir: './',
collectCoverage: true,
collectCoverageFrom: [
'<rootDir>/**/*.ts',
'!<rootDir>/**/*.interface.ts',
'!<rootDir>/**/*.mock.ts',
'!<rootDir>/**/*.module.ts',
'!<rootDir>/**/__mock__/*',
'!<rootDir>/src/main.ts'
],
coverageProvider: 'v8',
coverageReporters: [
'clover',
'json',
'lcov',
'text',
'text-summary'
],
resetModules: true,
setupFiles: [
'dotenv/config'
],
// Add the community jest-extended matchers
setupFilesAfterEnv: [
'jest-extended'
],
verbose: false
};
我的 jest.config.js(用于单元测试)将扩展我的 jest-base.config.js 以添加单元测试特定的代码,例如覆盖率要求、存储覆盖率输出的位置等。jest.config.js
const JestBaseConfiguration = require('./jest-base.config');
module.exports = Object.assign(JestBaseConfiguration, {
moduleFileExtensions: ['js', 'json', 'ts'],
testRegex: '.e2e-spec.ts$',
transform: {
'^.+\\.(t|j)s$': 'ts-jest'
},
...
关于javascript - ts-jest 无法解析 tsconfig 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68185573/