istanbul-combine will be deprecated in favor of 伊斯坦布尔报告。我最近进行了迁移。
这是我在 istanbul-combine
中使用的旧配置:
istanbul-combine -d coverage -p none -r lcov -r cobertura coverage/hierarchical-grid/coverage-final.json coverage/tree-grid/coverage-final.json coverage/non-grid/coverage-final.json coverage/grid/coverage-final.json
改为:
istanbul report --dir coverage --include coverage/**/coverage-final.json lcov
Related Pull Request.
,
因此,我找到了解决此问题的另一种方法。我写了一个小脚本,该脚本执行以下操作。
- 读取图书馆目录并查找所有覆盖率报告
- 读取覆盖率报告并更正玩笑产生的一些不正确数据
- 将所有报告数据合并为一个报告
- 打印出最终报告
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);
});
本文链接:https://www.f2er.com/3146358.html