ts-jest(TypeScript Jest)中映射路径问题,找不到模块
Problem mapping path in ts-jest (TypeScript Jest), module cannot be found
我想在我的后端实施一些玩笑测试,所以我试图通过 jest.config.js 的 moduleNameMapper
映射我在 tsconfig.json 中配置的路径,但是当我运行 测试发现文件仍未导入,第 8 行显示此错误 ⬇
请帮助我正确映射我的路径,我将不胜感激任何帮助。
为了帮助你帮助我,这里有重要的文件。
jest.config.js
(这里通常配置jest)⬇
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
testMatch: ["**/***.test.ts"],
verbose: true,
forceExit: true,
moduleNameMapper: {
'@util/(.*)': '<rootDir>/src/util/'
}
};
tsconfig.json
(打字稿的普通配置文件)⬇
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"baseUrl": "src",
"paths": {
"@util/*": ["util/*"]
},
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
}
}
此问题是由于绝对导入引起的。如果仔细观察,您会发现您的导入语句是 util/logger
。这种进口没有妥善解决。
如果您使用 VSCode,那么这是一种常见的情况,因为 VSCode 会尝试减少导入语句的长度。
要解决此问题,请使用相对导入。所以你的导入应该如下所示:
import logger from '../util/logger'
(注意:以上导入是相对于路径src/middleware/authenticateUser.ts
,请根据您在哪个文件中使用导入更新导入)
我用以下内容创建了一个名为 .babelrc
的文件 ⬇ :
{
"presets": ["@babel/preset-env"]
}
然后我配置了jest.config.js
如下图⬇
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
module.exports = {
transform: {
'^.+\.ts$': 'ts-jest',
'^.+\.js$': 'babel-jest',
'^.+\.mjs$': 'babel-jest',
},
moduleDirectories: ['node_modules', '<rootDir>/src'],
moduleNameMapper: {
'@controllers/(.*)': '<rootDir>/src/controllers/',
'@middleware/(.*)': '<rootDir>/src/middleware/',
'@models/(.*)': '<rootDir>/src/models/',
'@routes/(.*)': '<rootDir>/src/routes/',
'@types/(.*)': '<rootDir>/src/types/',
'@util/(.*)': '<rootDir>/src/util/',
}
};
然后我配置了tsconfig.json如下图⬇:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"baseUrl": "src",
"paths": {
"@util/*": ["util/*"]
},
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true,
"types": ["jest"]
}
}
感谢 Benjamin Drury 和@Ashok 的大力支持。
我想在我的后端实施一些玩笑测试,所以我试图通过 jest.config.js 的 moduleNameMapper
映射我在 tsconfig.json 中配置的路径,但是当我运行 测试发现文件仍未导入,第 8 行显示此错误 ⬇
请帮助我正确映射我的路径,我将不胜感激任何帮助。
为了帮助你帮助我,这里有重要的文件。
jest.config.js
(这里通常配置jest)⬇
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
testMatch: ["**/***.test.ts"],
verbose: true,
forceExit: true,
moduleNameMapper: {
'@util/(.*)': '<rootDir>/src/util/'
}
};
tsconfig.json
(打字稿的普通配置文件)⬇
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"baseUrl": "src",
"paths": {
"@util/*": ["util/*"]
},
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
}
}
此问题是由于绝对导入引起的。如果仔细观察,您会发现您的导入语句是 util/logger
。这种进口没有妥善解决。
如果您使用 VSCode,那么这是一种常见的情况,因为 VSCode 会尝试减少导入语句的长度。
要解决此问题,请使用相对导入。所以你的导入应该如下所示:
import logger from '../util/logger'
(注意:以上导入是相对于路径src/middleware/authenticateUser.ts
,请根据您在哪个文件中使用导入更新导入)
我用以下内容创建了一个名为 .babelrc
的文件 ⬇ :
{
"presets": ["@babel/preset-env"]
}
然后我配置了jest.config.js
如下图⬇
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
module.exports = {
transform: {
'^.+\.ts$': 'ts-jest',
'^.+\.js$': 'babel-jest',
'^.+\.mjs$': 'babel-jest',
},
moduleDirectories: ['node_modules', '<rootDir>/src'],
moduleNameMapper: {
'@controllers/(.*)': '<rootDir>/src/controllers/',
'@middleware/(.*)': '<rootDir>/src/middleware/',
'@models/(.*)': '<rootDir>/src/models/',
'@routes/(.*)': '<rootDir>/src/routes/',
'@types/(.*)': '<rootDir>/src/types/',
'@util/(.*)': '<rootDir>/src/util/',
}
};
然后我配置了tsconfig.json如下图⬇:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"baseUrl": "src",
"paths": {
"@util/*": ["util/*"]
},
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true,
"types": ["jest"]
}
}
感谢 Benjamin Drury 和@Ashok 的大力支持。