我有一个typescript项目,我在ts.config.json 中设置别名
{
"compilerOptions": {
"paths": {
"@pkg/*": ["./packages/*"],
},
}
}
在我的ts文件中,我可以缩短导入路径
// example.ts
import {someThing} from '@pkg/mypackage'
它与CCD_ 1配合良好,vscode可以正确识别别名路径。
但当我运行npm t
时,whitch运行jest
,它会使失败
Cannot find module '@pkg/mypackage' from 'example.ts'
jest.config.js
module.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(用于单元测试(将扩展我的jess-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'
},
...