Jest中如何实现类似TypeScript rootDirs的跨根目录相对导入功能
Jest 没有直接对标 TypeScript rootDirs 的开箱即用配置,但可以通过组合配置实现完全一致的效果。
你尝试的roots配置和TS的rootDirs功能完全不匹配,它仅用于指定Jest搜索测试文件的目录范围,不负责模块导入路径解析,因此无法解决问题。
可通过以下两种方案实现需求:
方案1:手动配置moduleNameMapper(适合简单场景)
直接在Jest配置文件中添加模块映射规则,Jest匹配导入路径时会按顺序查找数组中的目录:
// jest.config.js module.exports = { preset: 'ts-jest', testEnvironment: 'node', moduleNameMapper: { '^\\./(.*)$': ['<rootDir>/src/main/$1', '<rootDir>/src/test/$1'] } }
方案2:复用tsconfig配置(适合复杂场景,避免重复维护)
- 先在
tsconfig.json的compilerOptions中添加paths配置,和你的rootDirs对应:
{ "compilerOptions": { "rootDirs": [ "src/main", "src/test" ], "paths": { "*": ["src/main/*", "src/test/*"] }, "moduleResolution": "node" } }
- 修改Jest配置,用
ts-jest提供的工具函数直接把tsconfig的paths转换为Jest可识别的映射规则:
// jest.config.js const { pathsToModuleNameMapper } = require('ts-jest') const { compilerOptions } = require('./tsconfig.json') module.exports = { preset: 'ts-jest', testEnvironment: 'node', moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, { prefix: '<rootDir>/' }) }
内容的提问来源于stack exchange,提问作者oal
相关产品推荐
相关产品推荐

