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

fel*_*ker 6 javascript code-coverage node.js istanbul

我想执行命令

istanbul cover node_modules/mocha/bin/_mocha dist/test
Run Code Online (Sandbox Code Playgroud)

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

Ray*_*oal 0

我想出了一种方法来做到这一点,但它不太漂亮。如果您eval(我知道!)检测代码,Istanbul 会将覆盖对象写入全局变量__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__']));
  });
});
Run Code Online (Sandbox Code Playgroud)

文件部分和console.log仅仅是为了做一个完整的 demo。您真正需要的是instrumenteval。是否愿意eval在这里使用自己取决于您。