1

Ich habe Probleme bekommen karma-browserify mit karma-coverage arbeiten. Ich habe viel Zeit damit verbracht, herauszufinden, was falsch ist, aber ich habe keine Lösung gefunden.Problem mit Karma-Browserify + Karma-Coverage

Hier ist meine JS-Datei (die Funktionen nichts tun, sind sie spottet nur Code-Coverage zu testen)

// src/js/utilities/form-validation.js 

let includedInTest =() => true; 

let alsoIncludedInTest =() => true; 

let notIncludedInTest =() => true; 

let alsoNotIncludedInTest =() => true; 

export default { 
    validateInput, 
    browserifyTest 
}; 

Dies ist meine Testdatei

// src/spec/utilities/form-validation.spec.js 

import formUtilities from '../../js/utilities/form-validation'; 

describe('Form validation functions', function() { 

    it('Should return "true"', function() { 
    expect(formUtilities.includedInTest()).toBe(true); 
    }); 

    it('Should return "true"', function() { 
    expect(formUtilities.alsoIncludedInTest()).toBe(true); 
    }); 

}); 

Schließlich dies, mein karma.conf ist

module.exports = function(config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['browserify', 'jasmine-jquery', 'jasmine'], 
    files: [ 
     'bower_components/jquery/dist/jquery.js', 
     'bower_components/jquery-validation/dist/jquery.validate.js', 
     'src/js/**/*.js', 
     'src/spec/**/*.spec.js' 
    ], 
    exclude: [ 
     'src/js/index.js' 
    ], 
    preprocessors: { 
     'src/js/**/*.js': ['browserify', 'coverage'], 
     'src/spec/**/*.spec.js': ['browserify'] 
    }, 
    browserify: { 
     debug: true, 
     transform: [ 
     ['babelify', { presets: ['es2015'] }] 
     ] 
    }, 
    reporters: ['mocha', 'coverage'], 
    mochaReporter: { 
     colors: { 
     success: 'green', 
     info: 'bgBlue', 
     warning: 'cyan', 
     error: 'bgRed' 
     }, 
     symbols: { 
     success: '√', 
     info: '#', 
     warning: '!', 
     error: 'x' 
     } 
    }, 
    coverageReporter: { 
     instrumenters: { isparta: require('isparta') }, 
     instrumenter: { 
     'src/**/*.js': 'isparta' 
     }, 
     dir: 'coverage', 
     subdir: '.', 
     reporters: [ 
     { type: 'html', dir: 'coverage' }, 
     { type: 'text-summary' } 
     ], 
     check: { 
     global: { 
      statements: 90, 
      branches: 90, 
      functions: 90, 
      lines: 90 
     }, 
     each: { 
      statements: 90, 
      branches: 90, 
      functions: 90, 
      lines: 90 
     } 
     }, 
     watermarks: { 
     statements: [50, 75], 
     functions: [50, 75], 
     branches: [50, 75], 
     lines: [50, 75] 
     } 
    }, 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: true, 
    browsers: ['PhantomJS'], 
    singleRun: false, 
    concurrency: Infinity 
    }); 
}; 

dieser Konfig-Ausbeuten dieses Ergebnis

Das ist offensichtlich falsch, da ich 4 Funktionen auf "form-validation.js" habe und 2 davon teste, aber laut dem zusammenfassenden Bericht gibt es keine zu testenden Funktionen.

Diese Linie von coverage/index.html zeigt nur eine Zeile von karma-coverage geparst wird:

enter image description here

I auch versucht 'browserify-Istanbul' in der Array-Transformation (und entfernt instrumenters von "coverageReport")

transform: [ 
    ['babelify', { presets: ['es2015'] }], 
    'browserify-istanbul' 
] 

aber dies erzeugt einen Fehler

18 08 2017 15:50:14.617:ERROR [karma]: TypeError: Cannot read property 'start' of undefined 
    at /Users/gferraz/Sites/OAA-Refactor/node_modules/istanbul/lib/object-utils.js:59:44 
    at Array.forEach (native) 
    at Object.addDerivedInfoForFile (/Users/gferraz/Sites/OAA-Refactor/node_modules/istanbul/lib/object-utils.js:58:37) 
    at Collector.fileCoverageFor (/Users/gferraz/Sites/OAA-Refactor/node_modules/istanbul/lib/collector.js:94:15) 
    at /Users/gferraz/Sites/OAA-Refactor/node_modules/istanbul/lib/collector.js:108:30 
    at Array.forEach (native) 
    at Collector.getFinalCoverage (/Users/gferraz/Sites/OAA-Refactor/node_modules/istanbul/lib/collector.js:107:22) 
    at checkCoverage (/Users/gferraz/Sites/OAA-Refactor/node_modules/karma-coverage/lib/reporter.js:148:33) 
    at /Users/gferraz/Sites/OAA-Refactor/node_modules/karma-coverage/lib/reporter.js:257:32 
    at Array.forEach (native) 
    at Collection.forEach (/Users/gferraz/Sites/OAA-Refactor/node_modules/karma/lib/browser_collection.js:93:21) 
    at /Users/gferraz/Sites/OAA-Refactor/node_modules/karma-coverage/lib/reporter.js:247:16 
    at Array.forEach (native) 
    at CoverageReporter.onRunComplete (/Users/gferraz/Sites/OAA-Refactor/node_modules/karma-coverage/lib/reporter.js:246:15) 
    at Server.<anonymous> (/Users/gferraz/Sites/OAA-Refactor/node_modules/karma/lib/events.js:13:22) 
    at emitTwo (events.js:111:20) 

Irgendwelche Vorschläge, wie Sie die Konfigurationsdatei reparieren können?

Vielen Dank.

Antwort

0

Die Config auf die richtige Antwort dieses Postens vorgeschlagen hat mir geholfen: Karma/Istanbul Code Coverage does not find functions and always returns 100%

Jetzt bin ich einen Fehler auf der HTML-Bericht bekommen ERROR [coverage]: TypeError: Cannot read property 'text' of undefined (dh die HTML-Datei, die ich für den Bericht erstellt werden soll, nicht erzeugt wird) Das scheint mit Istanbul zu tun zu haben. Allerdings ist ich immer den richtigen Code-Coverage-Bericht auf meinen Terminal-Fenster:

enter image description here

Merkwürdigerweise tritt der Fehler nicht jedes Mal der Tests laufen passieren, so dass ich im Stande bin, die HTML-Datei zu erhalten gerade fein manchmal. Hier

ist die karma.conf, die das Problem gelöst auf meine Frage gerichtet:

module.exports = function(config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['browserify', 'jasmine-jquery', 'jasmine'], 
    files: [ 
     'bower_components/jquery/dist/jquery.js', 
     'bower_components/jquery-validation/dist/jquery.validate.js', 
     'src/js/**/*.js', 
     'src/spec/**/*.spec.js' 
    ], 
    exclude: [ 
     'src/js/index.js' 
    ], 
    preprocessors: { 
     'src/js/**/*.js': ['browserify'], 
     'src/spec/**/*.spec.js': ['browserify'] 
    }, 
    browserify: { 
     debug: true, 
     extensions: ['.js'], 
     configure: (bundle) => { 
     bundle.transform('babelify', { presets: ['es2015'] }); 
     bundle.transform(require('browserify-istanbul')({ 
      ignore: ['**/spec/**'] 
     })); 
     }  
    }, 
    reporters: ['mocha', 'coverage'], 
    coverageReporter: { 
     dir: 'coverage', 
     subdir: '.', 
     reporters: [ 
     { type: 'html', dir: 'coverage' }, 
     { type: 'text-summary' } 
     ], 

     etc... 
    } 
    }); 
};