FeathersJS测试运行出现Jest TS6059 rootDir警告如何解决
TS6059测试文件不在rootDir范围内警告解决方案
错误根因
该警告触发的核心原因是TypeScript编译校验规则冲突:项目默认tsconfig配置中rootDir属性仅指定了/api/src作为源码根目录,但ts-jest运行测试时,会将/api/test目录下的测试文件作为编译入口传入TypeScript编译器,测试文件不在rootDir覆盖范围内就会触发该警告。因为ts-jest缓存存在,所以会出现全新搭建后随机触发的现象。
可行解决方案
下面两种方案任选一种即可,优先推荐方案1,对生产构建无侵入更规范。
方案1:新增rootDirs配置(最简方案)
直接在根目录tsconfig.json的compilerOptions中新增rootDirs配置,将测试目录纳入合法根目录范围,无需修改其他原有配置:
{ "compilerOptions": { // 保留你原有的rootDir配置不变 "rootDir": "./src", // 新增如下配置,同时将src和test纳入合法根目录 "rootDirs": ["./src", "./test"], // 其他原有配置保持不变 } }
配置修改完成后删除node_modules/.cache目录清理ts-jest缓存,重新运行测试即可消除警告。该方案不会影响生产构建,生产编译时只要include属性仅包含src目录,测试文件不会被编译到输出目录中。
方案2:分层tsconfig配置(灵活性更高)
如果需要严格区分生产和测试的编译规则,可以拆分多套tsconfig配置:
- 根目录保留通用基础配置
tsconfig.json:
{ "compilerOptions": { // 移除原有rootDir配置,或者设置为项目根目录 "rootDir": "./", "outDir": "./dist", // 其他通用编译配置保持不变,比如target、module、strict规则等 }, "exclude": ["node_modules"] }
- 新增生产构建专用配置
tsconfig.build.json:
{ "extends": "./tsconfig.json", "compilerOptions": { "rootDir": "./src" }, "include": ["src/**/*"] }
生产构建时使用tsc -p tsconfig.build.json命令即可,只会编译src下的业务代码。
3. 新增测试专用配置tsconfig.test.json:
{ "extends": "./tsconfig.json", "include": ["src/**/*", "test/**/*"] }
- 在
jest.config.js中指定测试使用的tsconfig配置:
module.exports = { // 保留其他原有jest配置 transform: { "^.+\\.ts$": ["ts-jest", { tsconfig: "tsconfig.test.json" }] } }
配置完成后清理ts-jest缓存,重新运行测试即可。
内容的提问来源于stack exchange,提问作者Soullivaneuh
相关产品推荐
相关产品推荐

