React Testing Library运行测试时Jest无法找到.d.ts声明的模块联邦模块
问题根因
这个问题是ts-jest的类型检测逻辑和项目正常编译的tsc逻辑不一致导致的:Jest运行时默认不会加载src目录外根目录下的类型声明文件,且模块联邦的远程模块别名没有被Jest正确识别。你用React.lazy导入不报错是因为动态导入不会被Jest的静态类型检查提前解析,所以不会触发类型找不到的报错。
解决方案
按以下步骤依次排查修改即可:
- 调整Jest配置
在你的jest.config.js(或package.json内的jest配置段)添加以下配置:
module.exports = { // 其他原有配置保留 moduleNameMapper: { // 映射UI模块到你的类型声明文件 "^UI$": "<rootDir>/UI.d.ts" }, transform: { "^.+\\.(ts|tsx)$": [ "ts-jest", { // 显式指定ts-jest使用的tsconfig包含规则,和你项目的tsconfig对齐 tsconfig: { include: ["src", "**/*.d.ts"] } } ] } }
- 校验Jest rootDir配置
确认你的Jest配置里没有把rootDir设置为src,如果有要改为项目根目录,才能正常读取根目录下的UI.d.ts文件。 - 兼容性优化(可选)
如果以上配置修改后还有问题,可以把根目录的UI.d.ts移动到src/@types/UI.d.ts路径,TS和ts-jest默认都会自动读取src/@types目录下的类型声明,兼容性更好。
内容的提问来源于stack exchange,提问作者Fiodorov Andrei
相关产品推荐
相关产品推荐

