如何让Jest测试的npm run test输出XML格式结果供TeamCity使用?
Jest测试输出转XML适配TeamCity的实现方法
使用Jest内置TeamCity Reporter
Jest自带适配TeamCity的报告生成器,无需额外安装依赖。你可以直接修改测试命令:npm run test -- --reporters=teamcity或者在项目的
jest.config.js配置文件中添加全局配置,这样每次运行npm run test都会自动输出TeamCity兼容的XML格式日志:module.exports = { reporters: ['default', 'teamcity'] // 保留默认控制台输出的同时,输出TeamCity格式 };使用第三方TeamCity专用Reporter包
如果内置功能无法满足需求,可以使用第三方包jest-teamcity:- 先安装开发依赖:
npm install --save-dev jest-teamcity - 运行测试时指定该报告器:
npm run test -- --reporters=jest-teamcity - 也可以配置到
jest.config.js中实现永久生效:module.exports = { reporters: ['jest-teamcity'] };
- 先安装开发依赖:
自定义JSON转XML脚本
若需要完全自定义输出格式,可以先让Jest输出JSON格式的测试结果,再通过脚本转换为TeamCity兼容的XML:- 生成JSON格式测试结果:
npm run test -- --json --outputFile=test-results.json - 编写转换脚本(示例使用
xmlbuilder库):
先安装依赖:
创建npm install --save-dev xmlbuilderconvert-to-xml.js文件:const fs = require('fs'); const xmlbuilder = require('xmlbuilder'); const testResults = require('./test-results.json'); const xmlRoot = xmlbuilder.create('testResults', { encoding: 'UTF-8' }); // 遍历测试套件与用例,生成TeamCity兼容的XML节点 testResults.testResults.forEach(suite => { const suiteNode = xmlRoot.ele('testSuite', { name: suite.name, duration: suite.duration }); suite.testResults.forEach(testCase => { const caseNode = suiteNode.ele('testCase', { name: testCase.name, duration: testCase.duration }); if (testCase.status === 'failed') { caseNode.ele('failure', { message: testCase.failureMessages?.[0] || '测试失败' }); } }); }); // 写入XML文件 fs.writeFileSync('teamcity-test-results.xml', xmlRoot.end({ pretty: true })); - 运行脚本完成转换:
node convert-to-xml.js
- 生成JSON格式测试结果:
内容的提问来源于stack exchange,提问作者Nilesh Suryawanshi
相关产品推荐
相关产品推荐

