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