Código mínimo para usar Estambul programáticamente

Quiero ejecutar el command

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

utilizando la API programática de Estambul. Pero los documentos no dicen mucho al respecto, además de que todo es posible y se vincula a la enorme documentation de la API. No pude encontrar ningún ejemplo corto en internet. No quiero generar un process secundario o usar otro module de NPM. Sé cómo ejecutar Mocha programáticamente sin cobertura, así que ese no es el problema.

Descubrí una forma de hacerlo, pero no es muy bonita. Si eval (¡lo sé!) El código instrumentado, Estambul escribe el object de cobertura en la variable global __coverage__ . También puede especificar el nombre de la variable global en el constructor para el instructor si lo desea. Aquí hay un script de command-line que muestra cómo se puede hacer:

 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__'])); }); }); 

La parte del file y console.log son solo para hacer una demostración completa. Todo lo que realmente necesitas es instrument y eval . Si usted usaría eval usted mismo aquí depende de usted.