2015-12-17 13 views
24

Ich teste einige Programmcode mit Jasmine von Node. Um dies zu tun, habe ich Setup die folgenden: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(); 

Wenn diese Tests laufen, würde Ich mag die Code-Coverage-Details erhalten. Während ich dies versuchte, stolperte ich über blanket.js. Meine Frage ist, wie kann ich die Ergebnisse der Codeabdeckung programmatisch ausgeben? Mit dem obigen Code erhalte ich einen Fehler. Der Fehler sagt einfach:

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

Warum? Was mache ich falsch?

aktualisieren

In meiner package.son Datei habe ich den folgenden Abschnitt:

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

Ich habe meine runTests Funktion aktualisiert wie folgt aussehen:

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; 

Der obige Code ist in einer Datei namens "main.js", die ich durch Aufruf von node main.js aus dem Konsolenfenster ausführen. "library.js" befindet sich auf derselben Ebene und die Tests befinden sich in einem untergeordneten Verzeichnis unter "./unit-tests/tests.js". Wenn das obige ausgeführt wird, wird der CustomerReporter-Code nie aufgerufen. Ich verstehe nicht warum.

+0

[Anweisungen zur Verwendung des Test-Jasmin runner] (https://github.com/alex-seville/blanket/blob/v1.1.7/docs/intermediate_browser.md). – approxiblue

+0

Noch kein Glück, die Decke von Node läuft. –

+0

Wie sieht '' library.js''' aus? –

Antwort

1

Versuchen individuelle Reporter https://github.com/alex-seville/blanket/blob/master/docs/advanced_browser.md#reporters

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

Leider hat dieser Ansatz für mich nicht funktioniert. Ich habe Ihren Code über der Zeile 'TerminalReporter..' in meiner Frage hinzugefügt. Also wurde der folgende Block hinzugefügt: '// Richte den Coverage-Reporter ein var blance = require ('blanket')(); decke.customReporter = funktion (coverage_results) { console.log (coverage_results); }; ' Ich bekomme jetzt einen Fehler, der sagt:' Fehler: Bad file instrument indicator. Muss ein String, Regex, Funktion oder Array sein. Was mache ich falsch? Der customReporter ist eine Funktion. –

7

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

Wenn Sie nicht angeben, die unten in Ihrem package.json, wirft Decke eine „Bad-Datei Instrument Anzeige muss eine Zeichenfolge, regex, Funktion sein. oder Array. " Error. Sobald Sie es benötigen ("Decke"); von irgendwo innerhalb des Knotens.

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

Also, selbst wenn ich das tue, sehe ich immer noch nicht die Code-Abdeckung.Ich habe 'var blanket = require (" blanket ") hinzugefügt ({" pattern ":"/unit-tests/"}); blanket.instrument ({}, function (result) { console.log (Ergebnis); }); 'Trotzdem sehe ich einen Fehler, der besagt:' TypeError: Kann Eigenschaft 'replace' von undefined nicht lesen. Ich bin so verwirrt. –

+0

Ich habe nur einmal Decke (auch mit Mokka-Einheit Tests) verwendet. Ich erinnere mich, das einzige knifflige Bit war in den Konfigurationsdateien (die package.json Datei glaube ich). Von der Deckblatt-Seite wird verlangt ("pauschal") ({/ * optionale Optionen * /}); – Tim

+0

Es tut mir leid, im Moment ohne meinen Computer zu reisen - ich nehme an, Sie wissen es bereits, aber hier ist die Decke Seite: http://blanketjs.org – Tim