7

Ich habe Browserify, 6to5ify und Karma, um nett zu spielen, meine Spezifikationen erfolgreich ausgeführt. Wenn ich jedoch die Codeabdeckung hinzufüge, gehen die Dinge in den Süden. Ich habe verschiedene Ansätze ausprobiert:Getting Karma, 6to5ify und Istanbul Ball zu spielen

  • Fügen Sie browserify-istanbul zu meiner karma.conf.js transformieren. Dies führt jedoch dazu, dass versucht wird, die Instrumentierung auf meinen Spezifikationsdateien auszuführen, wie es auch erscheinen würde.
  • Führen Sie coverage Preprozessor auf meine Quelldateien. Aber weil Istanbul (auch douglasduteil/karma-coverage#next) meine 6to5ify browserify-Transformation nicht liest, stürzt diese sofort auf der ersten Datei ab, die sie zu parsen versucht (wegen der import-Anweisung), oder wenn ich Karma-Coverage # next verwende, respektiert sie nicht Die browser Zuordnung in meinem Paket.json (mobiles Projekt, Backbone zu Exoskelett zugeordnet).

Gerade jetzt meine karma.conf.js sieht wie folgt aus:

module.exports = function(karma){ 
    karma.set({ 
    frameworks: ["browserify", "mocha", "chai-sinon"], 
    browserify: { 
     debug: true, 
     extensions: [".js", ".hbs"], 
     transform: ["6to5ify", "hbsfy"] 
    }, 
    reporters: ["dots", "osx", "junit", "coverage"], 
    coverageReporter: { 
     type: "text" 
    }, 
    junitReporter: { 
     outputFile: "spec/reports/test-results.xml" 
    }, 
    preprocessors: { 
     "src/javascript/**/*": ["coverage"], 
     "spec/**/*": ["browserify"] 
    }, 
    browsers: ["PhantomJS"], 
    files: ["spec/unit/**/*Spec.js"], 
    logLevel: "LOG_DEBUG", 
    autoWatch: true 
    }); 
}; 

Ich bin ein bisschen verloren, wie das alles zusammen arbeiten zu erhalten. Ich habe versucht, folgende these instructions, aber das hat nicht funktioniert, weil es nicht folgte meine browser Knoten in package.json. Jede Hilfe würde sehr geschätzt werden.

Antwort

13

Also, anscheinend muss ich browserify-istanbul, und ich brauche die browserify configure Haken, etwa so:

var to5ify = require('6to5ify'); 
var hbsfy = require('hbsfy'); 
var cover = require('browserify-istanbul'); 

var coverOptions = { 
    ignore: ['**/*Spec.js', '**/lib/*.js', '**/fixtures/*.hbs'], 
    defaultIgnore: true 
} 

module.exports = function(karma){ 
    karma.set({ 
    frameworks: ["browserify", "mocha", "chai-sinon"], 
    browserify: { 
     debug: false, 
     extensions: [".js", ".hbs"], 
     configure: function(bundle){ 
     bundle.on('prebundle', function(){ 
      bundle 
      .transform(to5ify) 
      .transform(hbsfy) 
      .transform(cover(coverOptions)); 
     }); 
     } 
    }, 
    reporters: ["dots", "osx", "junit", "coverage"], 
    coverageReporter: { 
     type: "text" 
    }, 
    junitReporter: { 
     outputFile: "spec/reports/test-results.xml" 
    }, 
    preprocessors: { 
     "spec/**/*": ["browserify"] 
    }, 
    browsers: ["PhantomJS"], 
    files: ["spec/unit/**/*Spec.js"], 
    logLevel: "LOG_DEBUG", 
    autoWatch: true 
    }); 
};