如何运行共享文件夹的测试?多项目共用组件Jasmine测试不识别问题
解决共享组件Jasmine单元测试识别问题
1. 检查Jasmine测试扫描配置
Jasmine不会自动扫描项目外的文件,得在测试配置里明确指定共享组件的测试文件路径:
- 如果用Karma,修改
karma.conf.js的files和preprocessors字段:
module.exports = function(config) { config.set({ files: [ 'src/**/*.spec.ts', // 原有项目测试文件 '../shared/**/*.spec.ts' // 新增共享组件测试路径 ], preprocessors: { 'src/**/*.spec.ts': ['webpack'], '../shared/**/*.spec.ts': ['webpack'] // 同步处理共享测试文件 } }); };
- 如果是Angular项目,修改
angular.json的test配置:
"test": { "builder": "@angular-devkit/build-angular:karma", "options": { "main": "src/test.ts", "include": [ "src/**/*.spec.ts", "../shared/**/*.spec.ts" ] } }
2. 修正tsconfig.spec.json的路径配置
之前的引入没生效大概率是路径规则错误,确保配置覆盖共享文件:
{ "extends": "./tsconfig.json", "compilerOptions": { "baseUrl": "./", "paths": { "@shared/*": ["../shared/*"] // 配置别名方便导入共享组件 } }, "include": [ "src/**/*.spec.ts", "../shared/**/*.spec.ts", "../shared/**/*.d.ts" // 确保类型文件被识别 ] }
注意路径是相对当前项目tsconfig的位置,别写错层级。
3. 排查共享库的编译与引用
如果把共享文件夹做成库后无效,检查这两点:
- 库的
tsconfig.lib.json要正确输出类型文件,主项目tsconfig.json的paths指向库的编译产物而非源码:
// 主项目tsconfig.json { "compilerOptions": { "paths": { "@shared-lib": ["../shared/dist"] } } }
- 在测试脚本里加前置编译命令,确保共享库先被编译:
// package.json "scripts": { "test": "npm run build:shared && ng test" }
4. 检查测试入口文件的加载逻辑
比如Angular的test.ts如果用require.context加载测试文件,要新增共享文件夹的上下文:
// 原有项目测试加载 const context = require.context('./', true, /\.spec\.ts$/); context.keys().map(context); // 新增共享组件测试加载 const sharedContext = require.context('../shared', true, /\.spec\.ts$/); sharedContext.keys().map(sharedContext);
内容的提问来源于stack exchange,提问作者IKERAGI
相关产品推荐
相关产品推荐

