如何在编程式运行Jest时添加mochawesome自定义报告器选项?
可行,但需要通过适配层实现
Jest本身没有像Mocha那样直接支持mochawesome报告器的接口,不过可以通过两种方式满足你的需求:
1. 自定义Jest报告器桥接mochawesome
Jest允许自定义报告器,你可以写一个桥接层,在Jest测试结束后把结果转换成mochawesome兼容的格式,再调用它生成报告。
实现步骤:
- 新建桥接报告器文件,比如
jest-mochawesome-reporter.js - 实现Jest报告器的接口,在测试完成的钩子中处理结果转换和报告生成
- 在Jest配置中启用这个自定义报告器
示例代码:
const { create } = require('mochawesome-report-generator'); const { BaseReporter } = require('@jest/reporters'); class JestMochawesomeReporter extends BaseReporter { async onRunComplete(_, results) { // 把Jest测试结果转成mochawesome能识别的格式 const mochaCompatibleResults = this.transformResults(results); // 生成mochawesome报告 await create({ results: mochaCompatibleResults, reportDir: './test-reports', reportFilename: 'jest-mochawesome-report', overwrite: true }); } transformResults(jestResults) { return { stats: { tests: jestResults.numTotalTests, passes: jestResults.numPassedTests, failures: jestResults.numFailedTests, duration: jestResults.testRunDuration }, tests: jestResults.testResults.map(testFile => ({ title: testFile.testFilePath, fullTitle: testFile.testFilePath, duration: testFile.perfStats.total, state: testFile.status === 'passed' ? 'passed' : 'failed', // 如需更详细的断言信息,这里要进一步解析testFile.failureMessages等字段 })) }; } } module.exports = JestMochawesomeReporter;
然后在jest.config.js中配置:
module.exports = { reporters: [ 'default', // 保留Jest默认控制台输出 './jest-mochawesome-reporter.js' ] };
2. 完全编程式运行Jest并生成报告
如果你不需要依赖Jest配置文件,直接用代码控制测试运行,可以调用jest-cli的runCLI方法,拿到测试结果后手动生成mochawesome报告。
示例代码:
const { runCLI } = require('jest-cli'); const { create } = require('mochawesome-report-generator'); async function runTestsAndGenerateReport() { // 定义Jest运行配置 const jestOptions = { testMatch: ['**/__tests__/**/*.test.js'], silent: true }; // 运行Jest测试 const { results } = await runCLI(jestOptions, [process.cwd()]); // 转换结果并生成报告 const mochaResults = transformJestResults(results); await create({ results: mochaResults, reportDir: './test-reports' }); } function transformJestResults(jestResults) { // 同上面的转换逻辑,可根据需求补充细节 return { stats: { tests: jestResults.numTotalTests, passes: jestResults.numPassedTests, failures: jestResults.numFailedTests, duration: jestResults.testRunDuration }, tests: jestResults.testResults.map(testFile => ({ title: testFile.testFilePath, duration: testFile.perfStats.total, state: testFile.status === 'passed' ? 'passed' : 'failed' })) }; } // 执行测试并生成报告 runTestsAndGenerateReport();
注意点
- 结果转换逻辑需要根据你的测试结构调整,比如要展示具体的断言失败信息,就得解析Jest返回的
failureMessages字段,把它映射到mochawesome的对应字段 - 要安装必要依赖:
npm install jest mochawesome @jest/reporters jest-cli --save-dev - 如果需要合并多批次测试的报告,可以用mochawesome的
merge方法
内容的提问来源于stack exchange,提问作者Hashir Azam
相关产品推荐
相关产品推荐

