From 2772516807667ec6c35c9eb4d0f28a1a50cde5e1 Mon Sep 17 00:00:00 2001 From: Andre Wiggins Date: Tue, 20 Nov 2018 13:49:26 -0800 Subject: [PATCH] Add code coverage reporting --- .gitignore | 3 ++- package.json | 2 ++ src/cli.js | 3 ++- src/configure.js | 16 ++++++++++++++-- src/lib/babel-loader.js | 4 +++- 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 4c75cea..301132b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ node_modules *.log package-lock.json dist -build \ No newline at end of file +build +coverage diff --git a/package.json b/package.json index 2924020..ac2dbe5 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "dependencies": { "babel-core": "^6.26.0", "babel-loader": "^7.1.2", + "babel-plugin-istanbul": "^5.1.0", "babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-plugin-transform-react-jsx": "^6.24.1", "babel-polyfill": "^6.26.0", @@ -46,6 +47,7 @@ "jasmine-core": "^2.9.1", "karma": "^2.0.0", "karma-chrome-launcher": "^2.2.0", + "karma-coverage": "^1.1.2", "karma-jasmine": "^1.1.1", "karma-sourcemap-loader": "^0.3.7", "karma-spec-reporter": "0.0.32", diff --git a/src/cli.js b/src/cli.js index c67eeda..5d4e789 100644 --- a/src/cli.js +++ b/src/cli.js @@ -15,7 +15,8 @@ let prog = sade('karmatic'); prog .version(version) .option('--files', 'Minimatch pattern for test files') - .option('--headless', 'Run using Chrome Headless', true); + .option('--headless', 'Run using Chrome Headless', true) + .option('--coverage', 'Report code coverage of tests', true); prog .command('run [...files]', '', { default: true }) diff --git a/src/configure.js b/src/configure.js index 3e0c8b8..2e4818a 100644 --- a/src/configure.js +++ b/src/configure.js @@ -27,7 +27,9 @@ export default function configure(options) { 'karma-spec-reporter', 'karma-sourcemap-loader', 'karma-webpack' - ]; + ].concat( + options.coverage ? 'karma-coverage' : [] + ); const WEBPACK_CONFIGS = [ 'webpack.config.babel.js', @@ -109,7 +111,9 @@ export default function configure(options) { basePath: cwd, plugins: PLUGINS.map(require.resolve), frameworks: ['jasmine'], - reporters: ['spec'], + reporters: ['spec'].concat( + options.coverage ? 'coverage' : [] + ), browsers: [options.headless===false ? 'KarmaticChrome' : 'KarmaticChromeHeadless'], customLaunchers: { @@ -122,6 +126,14 @@ export default function configure(options) { } }, + coverageReporter: { + reporters: [ + { type: 'text-summary' }, + { type: 'html' }, + { type: 'lcovonly', subdir: '.', file: 'lcov.info' } + ] + }, + formatError(msg) { try { msg = JSON.parse(msg).message; diff --git a/src/lib/babel-loader.js b/src/lib/babel-loader.js index e6e5365..8129497 100644 --- a/src/lib/babel-loader.js +++ b/src/lib/babel-loader.js @@ -17,7 +17,9 @@ export default function babelLoader(options) { plugins: [ [require.resolve('babel-plugin-transform-object-rest-spread')], [require.resolve('babel-plugin-transform-react-jsx'), { pragma: options.pragma || 'h' }] - ] + ].concat( + options.coverage ? require.resolve('babel-plugin-istanbul') : [] + ) } }; }