2014-12-22 9 views
17

Attualmente Istanbul genera solo una copertura per i file utilizzati nei miei test, il che va bene, ma sembra sconfiggere lo scopo di avere una copertura un po '.Come fare in modo che Istanbul generi copertura per tutto il mio codice sorgente?

non ho alcuna configurazione di Istanbul, e sto invocando via npm test con la seguente stringa script:

$ istanbul cover _mocha -- -R dot --check-leaks --recursive test/

C'è un modo per generare la copertura per tutto il mio codice sorgente?

+0

Forse questa discussione ti aiuterà: http://stackoverflow.com/questions/22702578/full-gulp-istanbul-coverage-report/26418759#26418759 (ma questo richiede l'uso di gulp). Anche l'utilizzo dell'opzione includeUntested senza gulp potrebbe aiutare (https://github.com/SBoudrias/gulp-istanbul#includeuntested). – Anastasia

+0

Sembra promettente, grazie! – Seer

risposta

16

trovato la risposta, credo di essere in parte la fortuna che la struttura di directory che ho scelto mi permette di utilizzare questa opzione, ma il mio comando test è ora:

$ istanbul --include-all-sources cover _mocha -- -R dot --recursive test/

Il --include-all-sources è l'importante parte.

+1

Questo mi fa pensare che sia possibile, ma il --include-all-sources è per moka, corretto? Qual è stata la struttura della tua directory? Sto ancora cercando di farlo funzionare .. :( – Stretch

+0

Does --include-all-sources conta tutti i file .js nel tuo progetto, non solo quelli colpiti dal runtime? –

+1

Questo funziona per me, ma copre tutta la mia directory di lavoro Qualcuno sa come ottenere la copertura solo per la mia cartella 'src'? –

0

Istanbul consiglia di utilizzare nyc per verificare la copertura del codice. Suggerisce un approccio come questo:

nyc mocha 

Dopo aver eseguito questo comando, otterremo il rapporto sulla copertura. Ma ci sono un paio di insidie.

Prima di tutto, per impostazione predefinita, mocha cerca i test nella cartella test. Al fine di eseguire l'override di esso, dobbiamo impostare il nostro percorso nel file di mocha.opts come questo:

nyc mocha --opts ./mocha.opts 

E mocha.opts contiene tale codice, ad esempio:

spec/unit/back-end/**/*.spec.js 

Un altro problema è che di default nyc controlli copertura dei soli file richiesti, ovvero la tua domanda riguarda. La soluzione è impostare due opzioni per nyc (eseguo il test come script npm, quindi imposto le opzioni in package.json). Ecco il codice:

"nyc": { 
    "all": true, 
    "include": [ 
    "routes/*.js", 
    "routes/**/*.js", 
    "models/*.js" 
    ] 
}, 
"scripts": { 
    "mocha": "nyc mocha --opts ./mocha.opts", 
} 

Un altro modo per raggiungerlo è quello di impostare non include, ma exclude opzione al fine di escludere dalla copertura verifica file inappropriate. È strano, ma l'unica opzione all non funziona, richiede le opzioni include o exclude. È possibile ottenere ulteriori informazioni sulle opzioni nyc tramite nyc --help.

P.S. Non so nyc e mocha profondamente e sono basato solo sulla mia esperienza.