1

我遇到问题karma-browserifykarma-coverage一起使用。我花了很多时间来弄清楚什么是错误的,但没有找到解决办法。问题Karma-Browserify + Karma-Coverage

这里是我的js文件(该功能不会做任何事情,他们只是嘲笑测试代码覆盖率)

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

let includedInTest =() => true; 

let alsoIncludedInTest =() => true; 

let notIncludedInTest =() => true; 

let alsoNotIncludedInTest =() => true; 

export default { 
    validateInput, 
    browserifyTest 
}; 

这是我的测试文件

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

}); 

最后,是我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 
    }); 
}; 

这个配置收益率这一结果

==== Coverage summary ==== 
Statements : 100% (1/1) 
Branches  : 100% (2/2) 
Functions : 100% (0/0) 
Lines  : 100% (1/1) 
============= 

这显然是错误的,因为我对“form-validation.js”有4个函数,并且正在测试其中的2个函数,但根据汇总报告,没有要测试的函数。

这从coverage/index.html线揭示了只有一行被解析由karma-coverage:所述变换阵列中

enter image description here

我还试图 'browserify-伊斯坦布尔'(除去instrumenters从 “coverageReport”)

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

但这生成错误

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) 

有关如何修复配置文件的任何建议?

谢谢。

回答

0

的配置对这个职位的正确答案建议帮了我:Karma/Istanbul Code Coverage does not find functions and always returns 100%

现在我的HTML报告ERROR [coverage]: TypeError: Cannot read property 'text' of undefined(意为HTML文件我想生成不被生成的报告)收到一个错误,这似乎与伊斯坦布尔有关。不过,我让我的终端窗口右边的代码覆盖率报告:

enter image description here

奇怪的是,该错误不会发生在每次测试运行时间,因此我能够得到的HTML文件就好了有时。

这里是一个解决问题的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'], 
     '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... 
    } 
    }); 
};