2013-12-17 11 views
7

Der Titel sagt alles wirklich. Trotz Internetsuche habe ich kein einziges Beispiel für eine Lösung dieses Problems gefunden.Generieren von Ist-Code Coverage-Berichten für Jasmin-Tests (über Grunt) auf einem Browser-Bündel in phantomjs

Hier sind einige Beinahe-Unfälle

Hier ist meine in-progress-Code https://github.com/wheresrhys/on-guard/tree/browserify (beachten Sie, es ist die ‚browserify 'Branch - Gruntfile.js ist ein wenig durcheinander, wird es aber in Kürze aufräumen. Meine ersten Untersuchungen mit console.log zeigen an, dass irgendwie bundle.src.js in die Seite geladen wird, aber wenn die Tests ausgeführt werden (und übergeben!) Wird der Code in bundle.src.js nicht ausgeführt, so habe ich das Gefühl, es könnte ein Alias-Problem sein ... obwohl eine auf phantomjs beschränkt ist, wenn ich den specrunner in chrome öffne, wird der Code ausgeführt.

+0

Hat du darauf dieses heraus? Funktioniert es derzeit im On-Guard-Projekt? –

+0

Was bedeutet es, wenn diese Frage seit 3 ​​Jahren hier ist und keine Antwort gibt ... – QueueHammer

Antwort

0

Ich verwende grunt-browserify + browserify-istanbul + grunt-contrib-jasmine + grunt-template-jasmine-istanbul als Lösung. Diese Lösung enthält auch ausgeschlossen Bibliotheken von Drittanbietern beim Erstellen von Quelldateien mit browserify.

Zeigen Sie den Code zuerst, wie ich später erklären werde,

grunt.initConfig({ 
browserify: { 
    // build specs using browserify 
    specs: { 
    src: ["spec/**/*Spec.js"], 
    dest: "spec/build/specs.js", 
    options: { 
     debug: true 
    } 
    }, 
    // build source files using browserify and browserify-istanbul 
    dev: { 
    options: { 
     debug: true, 
     browserifyOptions: { 
     standalone: 'abc' 
     }, 
     transform: [['browserify-istanbul', { 
     ignore: ['**/node_modules/**'], // ignore third party libs 
     defaultIgnore: true 
     }]] 
    }, 
    src: ['abc.js'], 
    dest: 'dist/abc.js' 
    } 
}, 
connect: { 
    server: { 
    options: { 
     port: 7000 
    } 
    } 
}, 
// test using jasmine, generate coverage report using istanbul 
jasmine: { 
    coverage: { 
    src: ['dist/abc.js'], 
    options: { 
     junit: { 
      path: 'bin/junit' 
     }, 
     host: 'http://localhost:7000/', 
     specs: 'spec/build/specs.js', 
     keepRunner: true, 
     summary: true, 
     template: require('grunt-template-jasmine-istanbul'), 
     templateOptions: { 
     replace: false, // *** this option is very important 
     coverage: 'bin/coverage/coverage.json', 
     report: [ 
      { 
      type: 'html', 
      options: { 
      dir: 'spec/coverage/html' 
      } 
     }] 
     } 
    } 
    }  
} 

    grunt.registerTask('specs', ['browserify:specs', 'browserify:dev', 'connect', 'jasmine']); 

Die Schritte von Istanbul Berichterstattung Bericht erstellen kann in drei geschlossen werden:

  • Run Test
    1. Instrument Code
    2. Deckungsbericht erstellen

    In unserer Lösung nutzen wir browerify-istanbul in Schritt 1 grunt-contrib-jasmine und runt-template-jasmine-istanbul in Schritt 2 und 3

    browserify-istanbul werden Sie Instrument Code in browserify Aufbauschritt auf diese Weise lassen, können wir leicht Dritten Libs ignorieren. Aber die grunt-template-jasmine-istanbul wird wieder Instrument Code. Um dies zu vermeiden, können Sie in den Optionen replace auf false setzen.

    Refs:

    1. Istanbul steps
    2. broswerify-istanbul
    3. grunt-contrib-jasmine
    4. grunt-template-jasmine-istanbul - replace Option