From 803fa36cdf1bad0db6435f5c6e897f1249932ad1 Mon Sep 17 00:00:00 2001 From: Danny Blue Date: Wed, 27 Jul 2016 16:48:51 -0400 Subject: [PATCH 1/7] feat (CodeCoverage): use karma-remap-istanbul use karma-remap-istanbul to map code coverage back to source typescript file --- .../blueprints/ng2/files/config/karma.conf.js | 29 +++++++++++++++++-- addon/ng2/blueprints/ng2/files/package.json | 1 + addon/ng2/models/webpack-build-test.js | 3 ++ plugins/karma.js | 13 +++++++-- 4 files changed, 41 insertions(+), 5 deletions(-) diff --git a/addon/ng2/blueprints/ng2/files/config/karma.conf.js b/addon/ng2/blueprints/ng2/files/config/karma.conf.js index 118cdc2e7721..2ed0a1b27842 100644 --- a/addon/ng2/blueprints/ng2/files/config/karma.conf.js +++ b/addon/ng2/blueprints/ng2/files/config/karma.conf.js @@ -9,7 +9,8 @@ module.exports = function (config) { require('karma-jasmine'), require('karma-chrome-launcher'), require('karma-coverage'), - require('angular-cli/plugins/karma') + require('angular-cli/plugins/karma'), + require('karma-remap-istanbul') ], customLaunchers: { // chrome setup for travis CI using chromium @@ -22,10 +23,34 @@ module.exports = function (config) { { pattern: './src/test.ts', watched: false } ], preprocessors: { + './src/**/**/*.ts': ['angular-cli-coverage'], './src/test.ts': ['angular-cli'] }, + coverageReporter: { + dir: 'coverage', + reporters: [ + { + type: 'text-summary' + }, + { + type: 'json', + subdir: '.', + file: 'coverage-final.json' + } + ] + }, + + remapIstanbulReporter: { + src: 'coverage/coverage-final.json', + reports: { + lcovonly: 'coverage/lcov.info', + html: 'coverage/report' + }, + timeoutNotCreated: 5000, + timeoutNoMoreFiles: 1000 + }, angularCliConfig: './angular-cli.json', - reporters: ['coverage', 'progress'], + reporters: ['coverage', 'progress', 'karma-remap-istanbul'], port: 9876, colors: true, logLevel: config.LOG_INFO, diff --git a/addon/ng2/blueprints/ng2/files/package.json b/addon/ng2/blueprints/ng2/files/package.json index e7dfbbcc5608..a2f766c57e28 100644 --- a/addon/ng2/blueprints/ng2/files/package.json +++ b/addon/ng2/blueprints/ng2/files/package.json @@ -44,6 +44,7 @@ "karma-chrome-launcher": "0.2.3", "karma-coverage": "^1.0.0", "karma-jasmine": "0.3.8", + "karma-remap-istanbul": "^0.1.1", "protractor": "3.3.0", "ts-node": "1.2.1", "tslint": "3.13.0", diff --git a/addon/ng2/models/webpack-build-test.js b/addon/ng2/models/webpack-build-test.js index 3e249d549929..75d045b3c564 100644 --- a/addon/ng2/models/webpack-build-test.js +++ b/addon/ng2/models/webpack-build-test.js @@ -46,6 +46,9 @@ const getWebpackTestConfig = function(projectRoot, sourceDir) { tsconfig: path.resolve(projectRoot, `./${sourceDir}/tsconfig.json`), module: 'commonjs', target: 'es5', + mapRoot: false, + sourceMap: false, + inlineSourceMap: true, useForkChecker: true, removeComments: true } diff --git a/plugins/karma.js b/plugins/karma.js index 1282650d6659..13745d81e6b9 100644 --- a/plugins/karma.js +++ b/plugins/karma.js @@ -22,11 +22,17 @@ const init = (config) => { } }; - // replace the angular-cli preprocessor with webpack+sourcemap + // replace the angular-cli preprocessor with webpack Object.keys(config.preprocessors) .filter((file) => config.preprocessors[file].indexOf('angular-cli') !== -1) .map((file) => config.preprocessors[file]) - .map((arr) => arr.splice(arr.indexOf('angular-cli'), 1, 'webpack', 'sourcemap')); + .map((arr) => arr.splice(arr.indexOf('angular-cli'), 1, 'webpack')); + + // replace the angular-cli preprocessor with webpack + sourcemap + coverage + Object.keys(config.preprocessors) + .filter((file) => config.preprocessors[file].indexOf('angular-cli-coverage') !== -1) + .map((file) => config.preprocessors[file]) + .map((arr) => arr.splice(arr.indexOf('angular-cli-coverage'), 1, 'webpack', 'sourcemap', 'coverage')); } init.$inject = ['config'] @@ -38,5 +44,6 @@ preprocessor.$inject = [] // also export karma-webpack and karma-sourcemap-loader module.exports = Object.assign({ 'framework:angular-cli': ['factory', init], - 'preprocessor:angular-cli': ['factory', preprocessor] + 'preprocessor:angular-cli': ['factory', preprocessor], + 'preprocessor:angular-cli-coverage': ['factory', preprocessor], }, require('karma-webpack'), require('karma-sourcemap-loader')); \ No newline at end of file From b44464825809e4872d879b8505f9566f16886629 Mon Sep 17 00:00:00 2001 From: Danny Blue Date: Wed, 27 Jul 2016 17:52:17 -0400 Subject: [PATCH 2/7] remove trailing comma --- plugins/karma.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/karma.js b/plugins/karma.js index 13745d81e6b9..3564d11ff8d8 100644 --- a/plugins/karma.js +++ b/plugins/karma.js @@ -45,5 +45,5 @@ preprocessor.$inject = [] module.exports = Object.assign({ 'framework:angular-cli': ['factory', init], 'preprocessor:angular-cli': ['factory', preprocessor], - 'preprocessor:angular-cli-coverage': ['factory', preprocessor], + 'preprocessor:angular-cli-coverage': ['factory', preprocessor] }, require('karma-webpack'), require('karma-sourcemap-loader')); \ No newline at end of file From c76046fdb98fefcfe651c0414f719b531eb5ca61 Mon Sep 17 00:00:00 2001 From: Danny Blue Date: Wed, 27 Jul 2016 17:52:17 -0400 Subject: [PATCH 3/7] feat (CodeCoverage): use karma-remap-istanbul use karma-remap-istanbul to map code coverage back to source typescript file (+1 squashed commit) Squashed commits: [b444648] remove trailing comma feat (CodeCoverage): use karma-remap-istanbul use karma-remap-istanbul to map code coverage back to source typescript file --- .../blueprints/ng2/files/config/karma.conf.js | 29 +++++++++++++++++-- addon/ng2/blueprints/ng2/files/package.json | 1 + addon/ng2/models/webpack-build-test.js | 3 ++ plugins/karma.js | 3 +- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/addon/ng2/blueprints/ng2/files/config/karma.conf.js b/addon/ng2/blueprints/ng2/files/config/karma.conf.js index 118cdc2e7721..2ed0a1b27842 100644 --- a/addon/ng2/blueprints/ng2/files/config/karma.conf.js +++ b/addon/ng2/blueprints/ng2/files/config/karma.conf.js @@ -9,7 +9,8 @@ module.exports = function (config) { require('karma-jasmine'), require('karma-chrome-launcher'), require('karma-coverage'), - require('angular-cli/plugins/karma') + require('angular-cli/plugins/karma'), + require('karma-remap-istanbul') ], customLaunchers: { // chrome setup for travis CI using chromium @@ -22,10 +23,34 @@ module.exports = function (config) { { pattern: './src/test.ts', watched: false } ], preprocessors: { + './src/**/**/*.ts': ['angular-cli-coverage'], './src/test.ts': ['angular-cli'] }, + coverageReporter: { + dir: 'coverage', + reporters: [ + { + type: 'text-summary' + }, + { + type: 'json', + subdir: '.', + file: 'coverage-final.json' + } + ] + }, + + remapIstanbulReporter: { + src: 'coverage/coverage-final.json', + reports: { + lcovonly: 'coverage/lcov.info', + html: 'coverage/report' + }, + timeoutNotCreated: 5000, + timeoutNoMoreFiles: 1000 + }, angularCliConfig: './angular-cli.json', - reporters: ['coverage', 'progress'], + reporters: ['coverage', 'progress', 'karma-remap-istanbul'], port: 9876, colors: true, logLevel: config.LOG_INFO, diff --git a/addon/ng2/blueprints/ng2/files/package.json b/addon/ng2/blueprints/ng2/files/package.json index e7dfbbcc5608..a2f766c57e28 100644 --- a/addon/ng2/blueprints/ng2/files/package.json +++ b/addon/ng2/blueprints/ng2/files/package.json @@ -44,6 +44,7 @@ "karma-chrome-launcher": "0.2.3", "karma-coverage": "^1.0.0", "karma-jasmine": "0.3.8", + "karma-remap-istanbul": "^0.1.1", "protractor": "3.3.0", "ts-node": "1.2.1", "tslint": "3.13.0", diff --git a/addon/ng2/models/webpack-build-test.js b/addon/ng2/models/webpack-build-test.js index 3e249d549929..75d045b3c564 100644 --- a/addon/ng2/models/webpack-build-test.js +++ b/addon/ng2/models/webpack-build-test.js @@ -46,6 +46,9 @@ const getWebpackTestConfig = function(projectRoot, sourceDir) { tsconfig: path.resolve(projectRoot, `./${sourceDir}/tsconfig.json`), module: 'commonjs', target: 'es5', + mapRoot: false, + sourceMap: false, + inlineSourceMap: true, useForkChecker: true, removeComments: true } diff --git a/plugins/karma.js b/plugins/karma.js index 1282650d6659..051e09f450df 100644 --- a/plugins/karma.js +++ b/plugins/karma.js @@ -38,5 +38,6 @@ preprocessor.$inject = [] // also export karma-webpack and karma-sourcemap-loader module.exports = Object.assign({ 'framework:angular-cli': ['factory', init], - 'preprocessor:angular-cli': ['factory', preprocessor] + 'preprocessor:angular-cli': ['factory', preprocessor], + 'preprocessor:angular-cli-coverage': ['factory', preprocessor] }, require('karma-webpack'), require('karma-sourcemap-loader')); \ No newline at end of file From cdebee11824365fdba924986f3b32cbd7cdfb586 Mon Sep 17 00:00:00 2001 From: Danny Blue Date: Mon, 1 Aug 2016 20:47:54 -0400 Subject: [PATCH 4/7] update karma-remap-istanbul --- addon/ng2/blueprints/ng2/files/config/karma.conf.js | 11 +++++++++-- addon/ng2/blueprints/ng2/files/package.json | 1 + addon/ng2/models/webpack-build-test.js | 6 +++--- plugins/karma.js | 9 ++++++++- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/addon/ng2/blueprints/ng2/files/config/karma.conf.js b/addon/ng2/blueprints/ng2/files/config/karma.conf.js index 118cdc2e7721..4a2cee670ba8 100644 --- a/addon/ng2/blueprints/ng2/files/config/karma.conf.js +++ b/addon/ng2/blueprints/ng2/files/config/karma.conf.js @@ -1,4 +1,4 @@ -// Karma configuration file, see link for more information +// Karma configuration file, see link for more information // https://karma-runner.github.io/0.13/config/configuration-file.html module.exports = function (config) { @@ -9,6 +9,7 @@ module.exports = function (config) { require('karma-jasmine'), require('karma-chrome-launcher'), require('karma-coverage'), + require('karma-remap-istanbul'), require('angular-cli/plugins/karma') ], customLaunchers: { @@ -22,10 +23,16 @@ module.exports = function (config) { { pattern: './src/test.ts', watched: false } ], preprocessors: { + './src/app/**/**/*.ts': ['angular-cli-coverage'], './src/test.ts': ['angular-cli'] }, + remapIstanbulReporter: { + reports: { + html: 'coverage' + } + }, angularCliConfig: './angular-cli.json', - reporters: ['coverage', 'progress'], + reporters: ['coverage', 'progress', 'karma-remap-istanbul'], port: 9876, colors: true, logLevel: config.LOG_INFO, diff --git a/addon/ng2/blueprints/ng2/files/package.json b/addon/ng2/blueprints/ng2/files/package.json index e7dfbbcc5608..fbb302658b33 100644 --- a/addon/ng2/blueprints/ng2/files/package.json +++ b/addon/ng2/blueprints/ng2/files/package.json @@ -44,6 +44,7 @@ "karma-chrome-launcher": "0.2.3", "karma-coverage": "^1.0.0", "karma-jasmine": "0.3.8", + "karma-remap-istanbul": "^0.2.1", "protractor": "3.3.0", "ts-node": "1.2.1", "tslint": "3.13.0", diff --git a/addon/ng2/models/webpack-build-test.js b/addon/ng2/models/webpack-build-test.js index 5ed3d5c55ff8..a57313156b1f 100644 --- a/addon/ng2/models/webpack-build-test.js +++ b/addon/ng2/models/webpack-build-test.js @@ -46,8 +46,7 @@ const getWebpackTestConfig = function(projectRoot, sourceDir) { tsconfig: path.resolve(projectRoot, `./${sourceDir}/tsconfig.json`), module: 'commonjs', target: 'es5', - useForkChecker: true, - removeComments: true + useForkChecker: true } }, { @@ -70,7 +69,8 @@ const getWebpackTestConfig = function(projectRoot, sourceDir) { exclude: [ /\.(e2e|spec)\.ts$/, /node_modules/ - ] + ], + query: { 'force-sourcemap': true } } ] }, diff --git a/plugins/karma.js b/plugins/karma.js index 1282650d6659..0866be737940 100644 --- a/plugins/karma.js +++ b/plugins/karma.js @@ -27,6 +27,12 @@ const init = (config) => { .filter((file) => config.preprocessors[file].indexOf('angular-cli') !== -1) .map((file) => config.preprocessors[file]) .map((arr) => arr.splice(arr.indexOf('angular-cli'), 1, 'webpack', 'sourcemap')); + + // replace the angular-cli preprocessor with webpack+sourcemap + Object.keys(config.preprocessors) + .filter((file) => config.preprocessors[file].indexOf('angular-cli') !== -1) + .map((file) => config.preprocessors[file]) + .map((arr) => arr.splice(arr.indexOf('angular-cli-coverage'), 1, 'webpack', 'sourcemap', 'coverage')); } init.$inject = ['config'] @@ -38,5 +44,6 @@ preprocessor.$inject = [] // also export karma-webpack and karma-sourcemap-loader module.exports = Object.assign({ 'framework:angular-cli': ['factory', init], - 'preprocessor:angular-cli': ['factory', preprocessor] + 'preprocessor:angular-cli': ['factory', preprocessor], + 'preprocessor:angular-cli-coverage': ['factory', preprocessor] }, require('karma-webpack'), require('karma-sourcemap-loader')); \ No newline at end of file From b460f243983a58cfb0ca5097e6d97a65ac91adbe Mon Sep 17 00:00:00 2001 From: Danny Blue Date: Tue, 2 Aug 2016 10:18:43 -0400 Subject: [PATCH 5/7] chore: add unit tests for coverage report --- addon/ng2/blueprints/ng2/files/config/karma.conf.js | 9 +++++++-- plugins/karma.js | 7 ------- tests/e2e/e2e_workflow.spec.js | 8 ++++++++ 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/addon/ng2/blueprints/ng2/files/config/karma.conf.js b/addon/ng2/blueprints/ng2/files/config/karma.conf.js index 4a2cee670ba8..454f5655572e 100644 --- a/addon/ng2/blueprints/ng2/files/config/karma.conf.js +++ b/addon/ng2/blueprints/ng2/files/config/karma.conf.js @@ -23,12 +23,17 @@ module.exports = function (config) { { pattern: './src/test.ts', watched: false } ], preprocessors: { - './src/app/**/**/*.ts': ['angular-cli-coverage'], './src/test.ts': ['angular-cli'] }, + coverageReporter: { + dir: 'coverage', + reporters: [ + { type : 'json', subdir: '.', file: 'coverage-final.json'} + ] + }, remapIstanbulReporter: { reports: { - html: 'coverage' + html: 'coverage/report' } }, angularCliConfig: './angular-cli.json', diff --git a/plugins/karma.js b/plugins/karma.js index 0866be737940..f3018f8f59b6 100644 --- a/plugins/karma.js +++ b/plugins/karma.js @@ -27,12 +27,6 @@ const init = (config) => { .filter((file) => config.preprocessors[file].indexOf('angular-cli') !== -1) .map((file) => config.preprocessors[file]) .map((arr) => arr.splice(arr.indexOf('angular-cli'), 1, 'webpack', 'sourcemap')); - - // replace the angular-cli preprocessor with webpack+sourcemap - Object.keys(config.preprocessors) - .filter((file) => config.preprocessors[file].indexOf('angular-cli') !== -1) - .map((file) => config.preprocessors[file]) - .map((arr) => arr.splice(arr.indexOf('angular-cli-coverage'), 1, 'webpack', 'sourcemap', 'coverage')); } init.$inject = ['config'] @@ -45,5 +39,4 @@ preprocessor.$inject = [] module.exports = Object.assign({ 'framework:angular-cli': ['factory', init], 'preprocessor:angular-cli': ['factory', preprocessor], - 'preprocessor:angular-cli-coverage': ['factory', preprocessor] }, require('karma-webpack'), require('karma-sourcemap-loader')); \ No newline at end of file diff --git a/tests/e2e/e2e_workflow.spec.js b/tests/e2e/e2e_workflow.spec.js index 1aaa5159f3b7..059f14e360b4 100644 --- a/tests/e2e/e2e_workflow.spec.js +++ b/tests/e2e/e2e_workflow.spec.js @@ -283,6 +283,14 @@ describe('Basic end-to-end Workflow', function () { }); }); + it('Make sure the correct coverage folder is created', function () { + const coverageJson = path.join(process.cwd(), 'coverage', 'coverage-final.json'); + const coverageReport = path.join(process.cwd(), 'coverage', 'report', 'src', 'app'); + + expect(existsSync(coverageJson)).to.be.equal(true); + expect(existsSync(coverageReport)).to.be.equal(true); + }); + it('moves all files that live inside `public` into `dist`', function () { this.timeout(420000); From 66ff31fcd2d7dc84e027a741290c6ac7991c5035 Mon Sep 17 00:00:00 2001 From: Danny Blue Date: Tue, 2 Aug 2016 10:22:15 -0400 Subject: [PATCH 6/7] chore: remove trailing comma --- plugins/karma.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/karma.js b/plugins/karma.js index f3018f8f59b6..1282650d6659 100644 --- a/plugins/karma.js +++ b/plugins/karma.js @@ -38,5 +38,5 @@ preprocessor.$inject = [] // also export karma-webpack and karma-sourcemap-loader module.exports = Object.assign({ 'framework:angular-cli': ['factory', init], - 'preprocessor:angular-cli': ['factory', preprocessor], + 'preprocessor:angular-cli': ['factory', preprocessor] }, require('karma-webpack'), require('karma-sourcemap-loader')); \ No newline at end of file From 7297a138a9ffa24f34d123a3e1d6c88f376a72ec Mon Sep 17 00:00:00 2001 From: Danny Blue Date: Tue, 2 Aug 2016 12:26:11 -0400 Subject: [PATCH 7/7] chore: remove dependency on karma-coverage --- addon/ng2/blueprints/ng2/files/config/karma.conf.js | 11 ++--------- addon/ng2/blueprints/ng2/files/package.json | 1 - tests/e2e/e2e_workflow.spec.js | 4 +--- 3 files changed, 3 insertions(+), 13 deletions(-) diff --git a/addon/ng2/blueprints/ng2/files/config/karma.conf.js b/addon/ng2/blueprints/ng2/files/config/karma.conf.js index 454f5655572e..b8aa26e084b2 100644 --- a/addon/ng2/blueprints/ng2/files/config/karma.conf.js +++ b/addon/ng2/blueprints/ng2/files/config/karma.conf.js @@ -8,7 +8,6 @@ module.exports = function (config) { plugins: [ require('karma-jasmine'), require('karma-chrome-launcher'), - require('karma-coverage'), require('karma-remap-istanbul'), require('angular-cli/plugins/karma') ], @@ -25,19 +24,13 @@ module.exports = function (config) { preprocessors: { './src/test.ts': ['angular-cli'] }, - coverageReporter: { - dir: 'coverage', - reporters: [ - { type : 'json', subdir: '.', file: 'coverage-final.json'} - ] - }, remapIstanbulReporter: { reports: { - html: 'coverage/report' + html: 'coverage' } }, angularCliConfig: './angular-cli.json', - reporters: ['coverage', 'progress', 'karma-remap-istanbul'], + reporters: ['progress', 'karma-remap-istanbul'], port: 9876, colors: true, logLevel: config.LOG_INFO, diff --git a/addon/ng2/blueprints/ng2/files/package.json b/addon/ng2/blueprints/ng2/files/package.json index fbb302658b33..58f83e532c76 100644 --- a/addon/ng2/blueprints/ng2/files/package.json +++ b/addon/ng2/blueprints/ng2/files/package.json @@ -42,7 +42,6 @@ "jasmine-spec-reporter": "2.5.0", "karma": "0.13.22", "karma-chrome-launcher": "0.2.3", - "karma-coverage": "^1.0.0", "karma-jasmine": "0.3.8", "karma-remap-istanbul": "^0.2.1", "protractor": "3.3.0", diff --git a/tests/e2e/e2e_workflow.spec.js b/tests/e2e/e2e_workflow.spec.js index 059f14e360b4..deb515ffd943 100644 --- a/tests/e2e/e2e_workflow.spec.js +++ b/tests/e2e/e2e_workflow.spec.js @@ -284,10 +284,8 @@ describe('Basic end-to-end Workflow', function () { }); it('Make sure the correct coverage folder is created', function () { - const coverageJson = path.join(process.cwd(), 'coverage', 'coverage-final.json'); - const coverageReport = path.join(process.cwd(), 'coverage', 'report', 'src', 'app'); + const coverageReport = path.join(process.cwd(), 'coverage', 'src', 'app'); - expect(existsSync(coverageJson)).to.be.equal(true); expect(existsSync(coverageReport)).to.be.equal(true); });