以编程方式使用Istanbul的最小代码

时间:2016-09-03 00:30:57

标签: javascript node.js code-coverage istanbul

我想执行命令

istanbul cover node_modules/mocha/bin/_mocha dist/test

使用Istanbul编程API。但是文档并没有多说,除此之外一切皆有可能,并链接到庞大的API文档。我无法在互联网上找到任何简短的例子。我不想生成子进程或使用NPM中的其他模块。我知道如何在没有覆盖的情况下以编程方式运行Mocha,所以这不是问题。

1 个答案:

答案 0 :(得分:0)

我找到了一种方法来做到这一点,但它并不太漂亮。如果您eval(我知道!)已经过检测的代码,Istanbul会将coverage对象写入全局变量__coverage__。如果您愿意,还可以在指导者的构造函数中指定全局变量的名称。这是一个命令行脚本,显示了如何完成它:

const istanbul = require('istanbul');
const instrumenter = new istanbul.Instrumenter();
const collector = new istanbul.Collector();
const fs = require('fs');
const filename = 'file.js';

fs.readFile(filename, 'utf-8', (err, data) => {
  instrumenter.instrument(data, filename, (err, generatedCode) => {
    eval(generatedCode);
    console.log(JSON.stringify(global['__coverage__']));
  });
});

文件部分和console.log只是为了进行完整的演示。您真正需要的只是instrumenteval。您是否愿意亲自使用eval取决于您。