如何以编程方式获取Istanbul的coverage.json对象?

时间:2016-12-08 18:43:56

标签: code-coverage istanbul

我已经浏览了Istanbul API中的每个课程,但却无法了解如何制作"覆盖对象。"

检测代码完全没问题:

const istanbul = require('istanbul');
const instrumenter = new istanbul.Instrumenter();
instrumenter.instrument(sourceCode, filename, (err, instrumentedCode) => {
  console.log(instrumentedCode);
}

但这只是检测代码;我需要执行它才能生成覆盖对象。但我无法找到如何做到这一点。当然,我可以向伊斯坦布尔挑战并运行

istanbul cover filename.js

并挖掘并解析coverage.json文件,但我想要炮轰;我想在内存中的JavaScript程序上运行覆盖。

Istanbul API中的许多方法(如CollectorReporter中的方法)允许您处理coverage对象,但它们假设coverage对象已存在。我的问题是如何首先产生覆盖对象。我确定我错过了一些简单的事情。我注意到Instrumenter.lastFileCoverage()存在;我试过了,并且如所宣传的那样,得到了零覆盖对象,包括这样的行:

  statementMap: 
   { '1': SourceLocation { start: [Object], end: [Object], skip: undefined },
     '2': SourceLocation { start: [Object], end: [Object], skip: undefined },

我的问题是,如何在内存中生成覆盖对象(没有外壳)?我错过了一个简单的cover方法吗?

1 个答案:

答案 0 :(得分:0)

使用官方istanbul api repo中的istanbul-lib-instrument包。

它有一个方法lastFileCoverage,它与标准istanbul instrumenter's实现不同。

我刚刚对我正在进行的项目进行了测试,根据我的经验,这是一个替代品(api的指导者)。我还尝试了lastFileCoverage方法,它实际上为最后处理的文件提供了完整的文件覆盖率。