2016-07-29 51 views
1

Immer 100% Abdeckung.Aurelia-cli, babel-plugin-istanbul, Karma-Code-Abdeckung Der Bericht gibt immer 100% zurück

Die Datei karma.conf.js ist dieselbe wie die, die aurelia-cli generiert.

Ich möchte verwenden babel-plugin-istanbul code coverage reporting.

package.json ~~> Knotenmodul verwendet

"babel-plugin-istanbul": "^1.0.3", 
"jasmine-core": "^2.4.1", 
"karma": "^0.13.22", 
"karma-chrome-launcher": "^1.0.1", 
"karma-jasmine": "^1.0.2", 
"karma-babel-preprocessor": "^6.0.1", 
"karma-coverage": "^1.1.0", 
"karma-jasmine-html-reporter": "^0.2.0", 
"karma-sinon": "^1.0.5", 
"sinon": "^1.17.4" 

karma.conf.js (es gleich ist wie die durch aurelia-cli)

"use strict"; 
const path = require('path'); 
const project = require('./aurelia_project/aurelia.json'); 

let testSrc = [ 
    { pattern: project.unitTestRunner.source, included: false }, 
    'test/aurelia-karma.js' 
]; 

let output = project.platform.output; 
let appSrc = project.build.bundles.map(x => path.join(output, x.name)); 
let entryIndex = appSrc.indexOf(path.join(output, project.build.loader.configTarget)); 
let entryBundle = appSrc.splice(entryIndex, 1)[0]; 
let files = [entryBundle].concat(testSrc).concat(appSrc); 

module.exports = function(config) { 
    config.set({ 
    basePath: '', 
    frameworks: [project.testFramework.id, 'sinon'], 
    files: files, 
    exclude: [], 
    preprocessors: { 
     [project.unitTestRunner.source]: [project.transpiler.id] 
    }, 
    'babelPreprocessor': { options: project.transpiler.options }, 
    reporters: ['progress', 'kjhtml'], 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: true, 
    browsers: ['Chrome'], 
    singleRun: false 
    }); 
}; 

Die cover.js Datei

export function cover(done) { 
    new Karma({ 
    configFile: __dirname + '/../../karma.conf.js', 
    singleRun: true, 
    reporters: ['coverage'], 
    preprocessors: { 
     'test/unit/**/*.js': ['babel'], 
     'src/**/*.js': ['babel'] 
    }, 
    coverageReporter: { 
     includeAllSources: true, 
     reporters: [ 
     {type: 'html', dir: 'coverage'}, 
     {type: 'text'} 
     ] 
    } 
    }, done).start(); 
} 

Dank

Antwort

1

Sie benötigen keine Tests im Preprocessors-Bereich. Entfernen Sie also die erste Zeile und behalten Sie nur den Quellcode. Die Abdeckung bezieht sich nur auf Quellcode und nicht auf Testmethoden.

preprocessors: { 

     'src/**/*.js': ['babel'] 
    }, 
1

Ich sehe, dass Sie zumindest den Präprozessor für die Abdeckung fehlen:

preprocessors: { 
    'test/unit/**/*.js': ['babel'], 
    'src/**/*.js': ['babel', 'coverage'] 
}, 

Das heißt, ich hatte ähnliche Probleme auch bei, dass an seinem Platz.

Das Hauptproblem ist, dass das Standard-Aurelia-CLI-Setup für Karma das App-Paket als Quellen verwendet, um die Tests auszuführen. Dies wird nicht mit isparta mit diesem Ansatz instrumentiert.

Ich habe eine funktionierende Konfiguration wie folgt:

import gulp from 'gulp'; 
import {Server as Karma} from 'karma'; 
import {CLIOptions} from 'aurelia-cli'; 

let appBundle = "scripts/app-bundle.js"; 


export function cover(done) { 
    new Karma({ 
    configFile: __dirname + '/../../karma.conf.js', 
    singleRun: !CLIOptions.hasFlag('watch'), 
    reporters: ['coverage'], 
    logLevel: 'debug', 
    preprocessors: { 
     [project.unitTestRunner.source]: [project.transpiler.id], 
     [appBundle]: ['coverage'] 
    }, 
    coverageReporter: { 
     includeAllSources: true, 
     instrumenters: { 
     isparta: require('isparta') 
     }, 
     instrumenter: { 
     [appBundle]: 'isparta' 
     }, 
     reporters: [ 
     { type: 'html', dir: '.reports/coverage' }, 
     { type: 'text' } 
     ] 
    } 
    }, done).start(); 
} 

export default cover; 

In diesem Ort, ich Tests mit Abdeckung laufen kann. Leider basiert der Berichterstattungsbericht auf der einzigen Datei app-bundle.js, die Ihnen keine aufgeschlüsselten Berichte zu jeder Quelldatei liefert. Aber es ist gut genug, um wichtige Lücken in der Abdeckung zu finden, für die ich hauptsächlich verwende.

+0

Ich habe mehrere Ansätze gesehen, um Code-Coverage in Aurelia zu bekommen, und das ist das einzige, das für mich funktioniert hat. Vielen Dank! –