Angular15项目Jenkins中Karma+Jasmine测试无有效错误信息排查
问题描述
现有一个Angular 15.2项目,采用Karma + Jasmine编写测试用例。在Jenkins环境中执行测试时出现失败,但几乎没有可用于排查的有效错误信息。
Jenkins测试日志:
Chrome Headless 117.0.5938.132 (Windows 10): Executed 4 of 227 SUCCESS (0 secs / 0.292 secs) Chrome Headless 117.0.5938.132 (Windows 10): Executed 5 of 227 SUCCESS (0 secs / 0.325 secs) Chrome Headless 117.0.5938.132 (Windows 10): Executed 5 of 227 (skipped 222) SUCCESS (0.418 secs / 0.325 secs) 11 11 2023 13:01:41.295:DEBUG [launcher]: CAPTURED -> BEING_KILLED 11 11 2023 13:01:41.295:DEBUG [launcher]: BEING_KILLED -> BEING_FORCE_KILLED
项目配置片段:
angular.json 配置
"test": { "builder": "@angular-devkit/build-angular:karma", "options": { "karmaConfig": "karma.conf.js", "polyfills": ["zone.js", "zone.js/testing"], "tsConfig": "tsconfig.spec.json",
karma.conf.js 配置
module.exports = function (config) { config.set({ basePath: '', frameworks: ['jasmine', '@angular-devkit/build-angular'], plugins: [ require('karma-jasmine'), require('karma-chrome-launcher'), require('karma-jasmine-html-reporter'), require('karma-coverage'), require('@angular-devkit/build-angular/plugins/karma') ], client: { captureConsole: true,
仅在本地浏览器运行测试时,能看到关键提示:
Chrome 117.0.0.0 (Windows 10): Executed 5 of 227 (skipped 222) SUCCESS (0.361 secs / 0.287 secs) Incomplete: fit() or fdescribe() was found, 5 specs, 0 failures, randomized with seed
需求:如何在Jenkins环境中获取更多测试错误信息以辅助排查?
解决方法
针对Jenkins环境下Karma测试日志缺失的问题,可通过以下配置调整获取更完整的调试信息:
1. 增强Karma客户端日志输出
在karma.conf.js的client配置块中添加日志相关参数,强制输出详细信息:
client: { captureConsole: true, // 开启Jasmine详细日志 jasmine: { random: false, verbose: true, showColors: true }, // 保留控制台上下文,不清除日志 clearContext: false, // 捕获所有级别日志 level: 'LOG_DEBUG' },
2. 提升Karma全局日志级别
在karma.conf.js中设置全局日志级别为DEBUG,确保所有调试信息被输出:
config.set({ // ... 其他配置 logLevel: config.LOG_DEBUG, // ... });
3. 禁用测试跳过的静默模式
Jasmine的fit()/fdescribe()会跳过其他测试,但Jenkins默认不显示该提示。可通过命令参数强制输出完整结果:
- 在
angular.json的test配置options中添加:
"options": { // ... 现有配置 "watch": false, "progress": true, "verbose": true }
- 或直接在Jenkins执行命令时追加参数:
ng test --watch=false --progress=true --verbose=true
4. 捕获Headless Chrome控制台输出
在karma.conf.js的Chrome启动配置中添加参数,确保Headless模式下的控制台信息被捕获:
customLaunchers: { ChromeHeadless: { base: 'Chrome', flags: [ '--headless=new', '--disable-gpu', '--no-sandbox', '--disable-web-security', // 开启详细日志 '--enable-logging', '--v=1' ] } }, browsers: ['ChromeHeadless'],
5. 生成结构化测试报告
配置Karma生成JUnit格式报告,便于Jenkins解析完整测试细节:
- 安装依赖插件:
npm install karma-junit-reporter --save-dev
- 在
karma.conf.js中添加插件和配置:
plugins: [ // ... 现有插件 require('karma-junit-reporter') ], reporters: ['progress', 'junit'], junitReporter: { outputDir: './test-results', outputFile: 'test-results.xml', useBrowserName: false }
之后在Jenkins中配置读取该XML报告,即可查看完整的测试执行细节。
内容的提问来源于stack exchange,提问作者Leos Literak
相关产品推荐
相关产品推荐

