2015-12-17 13 views
24

Sto testando del codice a livello di codice utilizzando Jasmine dal nodo. Per fare questo, ho installato il seguente:Running Blanket.js

function runTests() { 
    var Jasmine = require('jasmine'); 
    var jasmine = new Jasmine();  

    jasmine.loadConfig({ 
     spec_dir: 'unit-tests', 
     spec_files: [ 
      'tests-*.js' 
     ] 
    }); 

    var blanket = require('blanket')(); 

    var TerminalReporter = require('jasmine-terminal-reporter'); 
    var reporter = new TerminalReporter({}); 
    jasmine.addReporter(reporter);  

    jasmine.execute(); 
} 

runTests(); 

Quando questi test eseguiti, vorrei avere i dettagli di copertura di codice. Durante il tentativo, sono incappato in blanket.js. La mia domanda è, come faccio a generare in modo programmatico i risultati della copertura del codice? Usando il codice sopra, ottengo un errore. L'errore dice semplicemente:

Error: Bad file instrument indicator. Must be a string, regex, function, or array. 

Perché? Che cosa sto facendo di sbagliato?

Aggiornamento

Nel mio file package.son, ho la seguente sezione:

"config": { 
    "blanket": {  
    "data-cover-flags": { 
     "engineOnly":true 
    } 
    }  
} 

Ho aggiornato la mia funzione runTests a guardare come questo:

function runTests() { 
    var Jasmine = require('jasmine'); 
    var jasmine = new Jasmine();  

    jasmine.loadConfig({ 
     spec_dir: 'unit-tests', 
     spec_files: [ 
      'tests-*.js' 
     ] 
    }); 

    // Setup the coverage reporter 
    var blanket = require("blanket")(); 
    var blanketReporter = function(coverageData) { 
     console.log(coverageData); 
    }; 
    blanket.customReporter = blanketReporter; 

    blanket.instrument({ 
     inputFile: 'library.js' 
    }, function(result) { }); 

    var TerminalReporter = require('jasmine-terminal-reporter'); 
    var reporter = new TerminalReporter({}); 
    jasmine.addReporter(reporter);  

    jasmine.execute(); 
} 

library.js

'use strict'; 

class Processor 
{ 
    execute(vals) { 
     let result = 0; 
     vals.forEach(function(v) { 
     result += v; 
     }); 
     return result; 
    } 
} 
module.exports = Processor; 

Il codice sopra riportato si trova in un file denominato "main.js" che eseguo chiamando node main.js dalla finestra della console. "library.js" è allo stesso livello e i test si trovano in una directory figlia in "./unit-tests/tests.js". Quando viene eseguito quanto sopra, il codice customerReporter non viene mai chiamato. Non capisco perché.

+0

[Istruzioni per l'uso del test di corridore Jasmine] (https://github.com/alex-seville/blanket/blob/v1.1.7/docs/intermediate_browser.md). – approxiblue

+0

Ancora senza fortuna coperta da Node. –

+0

Che aspetto ha '' 'library.js'''? –

risposta

1

Prova personalizzato giornalista https://github.com/alex-seville/blanket/blob/master/docs/advanced_browser.md#reporters

blanket.customReporter=function(coverage_results){ 
    console.log(coverage_results); 
}; 
+0

Sfortunatamente, questo approccio non ha funzionato per me. Ho aggiunto il tuo codice sopra la riga 'TerminalReporter..' nella mia domanda. Quindi, è stato aggiunto il seguente blocco: '// Impostazione del reporter di copertura var blanket = require ('blanket')(); blanket.customReporter = function (coverage_results) { console.log (coverage_results); }; ' Mi appare ora un errore che dice:' Errore: Indicatore di strumento file non valido. Deve essere una stringa, un'espressione regolare, una funzione o un array. Che cosa sto facendo di sbagliato? CustomReporter è una funzione. –

7

https://github.com/alex-seville/blanket/issues/248

Se non si specifica il qui sotto nella tua package.json, coperta lancia un "indicatore di Bad strumento file deve essere una stringa, regex, la funzione. o array. " errore. Non appena richiesto ('coperta'); da qualsiasi punto all'interno del nodo.

"scripts": { 
    "blanket": { 
     "data-cover-flags": { 
     "engineOnly":true 
     } 
    } 
    } 
+0

Quindi, anche quando lo faccio, continuo a non vedere la copertura del codice.Ho aggiunto 'var blanket = require (" blanket ") ({" pattern ":"/unit-tests/"}); blanket.instrument ({}, function (result) { console.log (risultato); }); 'Tuttavia, vedo un errore che dice:' TypeError: Impossibile leggere la proprietà 'replace' di undefined'. Sono così confuso. –

+0

Ho usato solo una volta coperta (anche con i test delle moka). Ricordo che l'unico bit difficile era nei file di configurazione (il file package.json credo). Dalla pagina coperta mostra ("coperta") ({/ * opzioni opzionali * /}); – Tim

+0

Mi dispiace viaggiare in questo momento senza il mio computer - presumo che tu lo sappia già ma qui è la pagina coperta: http://blanketjs.org – Tim