From 31808343849992d8fb7d1f1ee65bb0faf17b4ab6 Mon Sep 17 00:00:00 2001 From: Filipe Silva Date: Mon, 12 Sep 2016 21:55:16 +0100 Subject: [PATCH] fix(test): add build environment to karma --- .../angular-cli/blueprints/ng2/files/karma.conf.js | 5 ++++- packages/angular-cli/models/webpack-build-test.js | 14 +++++++++++--- packages/angular-cli/plugins/karma.js | 9 ++++++--- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/packages/angular-cli/blueprints/ng2/files/karma.conf.js b/packages/angular-cli/blueprints/ng2/files/karma.conf.js index 6f07f9d1dde4..5c349bd00abd 100644 --- a/packages/angular-cli/blueprints/ng2/files/karma.conf.js +++ b/packages/angular-cli/blueprints/ng2/files/karma.conf.js @@ -23,7 +23,10 @@ module.exports = function (config) { lcovonly: './coverage/coverage.lcov' } }, - angularCliConfig: './angular-cli.json', + angularCli: { + config: './angular-cli.json', + environment: 'dev' + }, reporters: ['progress', 'karma-remap-istanbul'], port: 9876, colors: true, diff --git a/packages/angular-cli/models/webpack-build-test.js b/packages/angular-cli/models/webpack-build-test.js index 38e04f1fd43e..3dc47c2dea03 100644 --- a/packages/angular-cli/models/webpack-build-test.js +++ b/packages/angular-cli/models/webpack-build-test.js @@ -3,8 +3,8 @@ const path = require('path'); const webpack = require('webpack'); -const getWebpackTestConfig = function(projectRoot, appConfig) { - +const getWebpackTestConfig = function (projectRoot, environment, appConfig) { + const appRoot = path.resolve(projectRoot, appConfig.root); return { @@ -81,7 +81,15 @@ const getWebpackTestConfig = function(projectRoot, appConfig) { new webpack.SourceMapDevToolPlugin({ filename: null, // if no value is provided the sourcemap is inlined test: /\.(ts|js)($|\?)/i // process .js and .ts files only - }) + }), + new webpack.NormalModuleReplacementPlugin( + // This plugin is responsible for swapping the environment files. + // Since it takes a RegExp as first parameter, we need to escape the path. + // See https://webpack.github.io/docs/list-of-plugins.html#normalmodulereplacementplugin + new RegExp(path.resolve(appRoot, appConfig.environments['source']) + .replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&')), + path.resolve(appRoot, appConfig.environments[environment]) + ), ], tslint: { emitErrors: false, diff --git a/packages/angular-cli/plugins/karma.js b/packages/angular-cli/plugins/karma.js index f9ed2e2a033d..daeaf0f303bf 100644 --- a/packages/angular-cli/plugins/karma.js +++ b/packages/angular-cli/plugins/karma.js @@ -4,12 +4,15 @@ const getWebpackTestConfig = require('../models/webpack-build-test').getWebpackT const init = (config) => { // load Angular CLI config - if (!config.angularCliConfig) throw new Error('Missing \'angularCliConfig\' entry in Karma config'); - const angularCliConfig = require(path.join(config.basePath, config.angularCliConfig)); + if (!config.angularCli && !config.angularCli.config) { + throw new Error('Missing \'angularCliConfig\' entry in Karma config'); + } + const angularCliConfig = require(path.join(config.basePath, config.config.angularCli.config)); const appConfig = angularCliConfig.apps[0]; + const environment = config.angularCli.environment || 'dev'; // add webpack config - config.webpack = getWebpackTestConfig(config.basePath, appConfig); + config.webpack = getWebpackTestConfig(config.basePath, environment, appConfig); config.webpackMiddleware = { noInfo: true, // Hide webpack output because its noisy. stats: { // Also prevent chunk and module display output, cleaner look. Only emit errors.