如何使用angular2 webpack设置karma-coverage?
我从棱角分明的快速启动webpack指南.但覆盖工具是空白的,不显示我的测试.谢谢!
我的文件夹结构是
project |--src (project files) |--tests (all my testfiles)
我的webpack.test.js看起来像这样
var helpers = require('./helpers'); module.exports = { devtool: 'inline-source-map',resolve: { extensions: ['','.ts','.js'] },module: { loaders: [ { test: /\.ts$/,loaders: ['ts'] },{ test: /\.html$/,loader: 'null' },{ test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/,loader: 'null' },{ test: /\.css$/,exclude: helpers.root('src','app'),include: helpers.root('src',loader: 'null' } ] } }
我的Karma.conf.js
var webpackConfig = require('./webpack.test'); module.exports = function (config) { var _config = { basePath: '',frameworks: ['jasmine','sinon'],files: [ {pattern: './config/karma-test-shim.js',watched: false} ],preprocessors: { './config/karma-test-shim.js': ['webpack','sourcemap'] },plugins:[ require('karma-jasmine'),require('karma-coverage'),require('karma-webpack'),require('karma-phantomjs-launcher'),require('karma-sourcemap-loader'),require('karma-mocha-reporter'),require('karma-sinon') ],coverageReporter: { type : 'html',dir : 'coverage/' },webpack: webpackConfig,webpackMiddleware: { stats: 'errors-only' },webpackServer: { noInfo: true },reporters: ['mocha','coverage'],port: 9876,colors: true,logLevel: config.LOG_INFO,autoWatch: true,browsers: ['PhantomJS'],singleRun: false }; config.set(_config); };
和karma-test-shim.js
Error.stackTraceLimit = Infinity; require('core-js/es6'); require('reflect-Metadata'); require('zone.js/dist/zone'); require('zone.js/dist/long-stack-trace-zone'); require('zone.js/dist/proxy'); require('zone.js/dist/sync-test'); require('zone.js/dist/jasmine-patch'); require('zone.js/dist/async-test'); require('zone.js/dist/fake-async-test'); var testContext = require.context('../tests',true,/\.spec\.ts/); testContext.keys().forEach(testContext); var testing = require('@angular/core/testing'); var browser = require('@angular/platform-browser-dynamic/testing'); testing.TestBed.initTestEnvironment(browser.BrowserDynamicTestingModule,browser.platformBrowserDynamicTesting());
Yuu需要将下面的代码覆盖插件导入到插件中
require('karma-coverage-istanbul-reporter'),
coverageIstanbulReporter: { reports: ['html','lcovonly'],fixWebpackSourcePaths: true,// enforce percentage thresholds // anything under these percentages will cause karma to fail with an exit code of 1 if not running in watch mode thresholds: { emitWarning: false,// set to `true` to not fail the test command when thresholds are not met global: { // thresholds for all files statements: 80,lines: 80,branches: 80,functions: 80 },each: { // thresholds per file statements: 80,functions: 80,overrides: {} } } },
karma.config.js的完整配置应该如下:
// Karma configuration file,see link for more information // https://karma-runner.github.io/0.13/config/configuration-file.html module.exports = function(config) { config.set({ basePath: '','@angular/cli'],plugins: [ require('karma-jasmine'),require('karma-chrome-launcher'),require('karma-jasmine-html-reporter'),require('karma-coverage-istanbul-reporter'),require('@angular/cli/plugins/karma'),require('karma-htmlfile-reporter'),],client: { clearContext: false // leave Jasmine Spec Runner output visible in browser },coverageIstanbulReporter: { reports: ['html',// enforce percentage thresholds // anything under these percentages will cause karma to fail with an exit code of 1 if not running in watch mode thresholds: { emitWarning: false,// set to `true` to not fail the test command when thresholds are not met global: { // thresholds for all files statements: 80,functions: 80 },each: { // thresholds per file statements: 80,overrides: {} } } },angularCli: { environment: 'dev' },// reporters: config.angularCli && config.angularCli.codeCoverage ? ['spec','karma-remap-istanbul'] : ['spec'],// reporters: ['mocha'],reporters: ['progress','html','kjhtml'],htmlReporter: { outputFile: 'testreports/report.html',// Optional pageTitle: 'Rest Reports',subPageTitle: 'Suite-wise report ',groupSuites: true,useCompactStyle: true,useLegacyStyle: false },browsers: ['Chrome'],singleRun: false }); };