使用伊斯坦布尔组合的组合覆盖率报告

问题描述 投票:0回答:1

假设我有这些报道报告:

  • / coverage / libs / test / lib1 / final-coverage.json
  • / coverage / libs / test / lib2 / final-coverage.json
  • / coverage / libs / test / lib3 / final-coverage.json

现在我想合并这些报告并生成一个html报告。

我正在使用此istanbul-combine来完成这种工作。但是似乎无法找到所有这些coverage json文件,我想知道为什么。

istanbul-combine -d coverage/reports -r lcov -r html /coverage/libs/test/**/coverage-final.json

在报告生成过程结束时,它为我提供了一个空的html报告。

angular unit-testing jestjs code-coverage istanbul
1个回答
0
投票

因此,我找到了解决此问题的另一种方法。我写了一个脚本来执行以下操作。

  • 读取图书馆目录并查找所有覆盖率报告
  • 将它们合并为一份报告
  • 打印报告

mergeCoverage.js

const fs = require( 'fs-extra');
const glob = require('glob');
const { createReporter } = require('istanbul-api');
const istanbulCoverage = require('istanbul-lib-coverage');

const reporter = createReporter();

/* [ Configuration ] */
const rootDir = './coverage/libs';
const reportOut = './coverage/report';

const normalizeJestCoverage = ( obj ) => {
  const result = { ...obj };

  Object
  .entries( result )
  .filter( ([k, v] ) => v.data )
  .forEach( ([k, v] ) => {
    result[k] = v.data;
  });

  return result;
};

const mergeAllReports = ( coverageMap, reports ) => {
  if ( Array.isArray( reports ) === false ) {
    return;
  }

  reports.forEach( reportFile => {
    const coverageReport = fs.readJSONSync( reportFile );
    coverageMap.merge( normalizeJestCoverage( coverageReport ) );
  })
};

const findAllCoverageReports = ( path, callback ) => {
  glob( path, {}, ( err, reports )=>{
    callback( reports, err );
  });
};

const generateReport = ( coverageMap, types ) => {
  reporter.dir = reportOut;
  reporter.addAll(types || ['html', 'text'] );
  reporter.write( coverageMap );
};

async function main () {
  const coverageMap = istanbulCoverage.createCoverageMap( {} );

  findAllCoverageReports( rootDir + '/**/coverage-final.json', ( reports, err ) => {
    if ( Array.isArray( reports ) ) {
      mergeAllReports( coverageMap, reports );
      generateReport( coverageMap, [ 'text' ]  )
    }
  });
}

main().catch(err => {
  console.error(err);
  process.exit(1);
});
© www.soinside.com 2019 - 2024. All rights reserved.