1

Je rencontre des problèmes pour obtenir karma-browserify pour fonctionner avec karma-coverage. J'ai passé beaucoup de temps à essayer de comprendre ce qui ne va pas mais je n'ai pas trouvé de solution.Problème avec Karma-Browserify + Karma-Coverage

Voici mon fichier .js (les fonctions ne font rien, ils sont tout simplement se moque de tester la couverture de code)

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

let includedInTest =() => true; 

let alsoIncludedInTest =() => true; 

let notIncludedInTest =() => true; 

let alsoNotIncludedInTest =() => true; 

export default { 
    validateInput, 
    browserifyTest 
}; 

Ceci est mon fichier de test

// 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); 
    }); 

}); 

Enfin, cette est mon karma.conf

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 
    }); 
}; 

cela donne config ce résultat

Ce qui est évidemment faux puisque j'ai 4 fonctions sur "form-validation.js" et j'en teste 2, mais selon le rapport de synthèse il n'y a pas de fonctions à tester.

Cette ligne de coverage/index.html révèle qu'une seule ligne est en cours d'analyse par karma-coverage:

enter image description here

J'ai aussi essayé 'browserify-istanbul' dans le tableau de transformation (et retiré instrumenters de "coverageReport")

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

mais cela génère une erreur

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) 

Une suggestion sur la façon de réparer le fichier de configuration?

Merci.

Répondre

0

La configuration suggérée sur la bonne réponse de ce poste m'a aidé: Karma/Istanbul Code Coverage does not find functions and always returns 100%

Maintenant, je reçois une erreur sur le rapport html ERROR [coverage]: TypeError: Cannot read property 'text' of undefined (ce qui signifie le fichier html je veux générer le rapport n'a pas été généré) , qui semble être lié à Istanbul. Cependant, je reçois le rapport droit de couverture de code sur ma fenêtre de terminal:

enter image description here

Étrangement, l'erreur ne se produit pas à chaque fois que l'exécution des tests, donc je suis en mesure d'obtenir le fichier html très bien parfois.

Voici le karma.conf qui a résolu le problème posé ma question:

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... 
    } 
    }); 
};