2016-09-03 72 views
5

chcę, aby wykonać polecenieMinimal kod używać Stambuł programowo

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

pomocą Istanbul programistyczny API. Ale doktorzy nie mówią zbyt wiele na ten temat, poza tym wszystko jest możliwe i łączenie z ogromną dokumentacją API. Nie mogłem znaleźć żadnego krótkiego przykładu w Internecie. Nie chcę odradzać procesu potomnego ani używać innego modułu z NPM. Wiem, jak uruchomić programowo Mocha bez zasięgu, więc to nie jest problem.

+0

Znaleziono [kilka opcji tutaj] (https://github.com/gotwarlost/istanbul/issues/394), ale nie są one wystarczająco szczegółowe. Wspaniale byłoby uzyskać wgląd w to, jak działa oprzyrządowanie/pokrycia itp., Przynajmniej w kontekście tego, w jaki sposób jest programowo programowany z interfejsem API w Stambule ... – laggingreflex

Odpowiedz

0

Wymyśliłem jeden sposób, aby to zrobić, ale nie jest zbyt piękny. Jeśli masz eval (wiem!) Kodowany instrumentem, Istanbul zapisuje obiekt pokrycia do globalnej zmiennej __coverage__. Możesz również podać nazwę zmiennej globalnej w konstruktorze dla instrumentatora, jeśli chcesz. Oto skrypt wiersza poleceń pokazuje w jaki sposób można to zrobić:

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

część pliku i console.log to tylko, aby kompletne demo. Wszystko, czego naprawdę potrzebujesz, to instrument i eval. Niezależnie od tego, czy sam korzystasz z usługi eval, to zależy od Ciebie.

+0

Wygląda na to, że działa on dla jednego pliku, ale dla całego testu Mocha zestaw? – felixfbecker