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..dfb6deba34ff 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..cfd414212116 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 \'angularCli.config\' entry in Karma config'); + } + const angularCliConfig = require(path.join(config.basePath, 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.