Skip to content

Commit 4ab84d3

Browse files
clydinfilipesilva
authored andcommitted
fix(@angular/cli): support app option for test command
1 parent efaa015 commit 4ab84d3

File tree

7 files changed

+31
-32
lines changed

7 files changed

+31
-32
lines changed

packages/@angular/cli/models/webpack-config.ts

+10-10
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@ import {
1414
import * as path from 'path';
1515
import { AngularCompilerPlugin } from '@ngtools/webpack';
1616

17-
export interface WebpackConfigOptions {
17+
export interface WebpackConfigOptions<T extends BuildOptions = BuildOptions> {
1818
projectRoot: string;
19-
buildOptions: BuildOptions;
19+
buildOptions: T;
2020
appConfig: any;
2121
}
2222

23-
export class NgCliWebpackConfig {
23+
export class NgCliWebpackConfig<T extends BuildOptions = BuildOptions> {
2424
public config: any;
25-
public wco: WebpackConfigOptions;
26-
constructor(buildOptions: BuildOptions, appConfig: any) {
25+
public wco: WebpackConfigOptions<T>;
26+
constructor(buildOptions: T, appConfig: any) {
2727

2828
this.validateBuildOptions(buildOptions);
2929

@@ -59,7 +59,7 @@ export class NgCliWebpackConfig {
5959
return this.config;
6060
}
6161

62-
public getTargetConfig(webpackConfigOptions: WebpackConfigOptions): any {
62+
public getTargetConfig(webpackConfigOptions: WebpackConfigOptions<T>): any {
6363
switch (webpackConfigOptions.buildOptions.target) {
6464
case 'development':
6565
return getDevConfig(webpackConfigOptions);
@@ -86,8 +86,8 @@ export class NgCliWebpackConfig {
8686
}
8787

8888
// Fill in defaults for build targets
89-
public addTargetDefaults(buildOptions: BuildOptions): BuildOptions {
90-
const targetDefaults: { [target: string]: BuildOptions } = {
89+
public addTargetDefaults(buildOptions: T): T {
90+
const targetDefaults: { [target: string]: Partial<BuildOptions> } = {
9191
development: {
9292
environment: 'dev',
9393
outputHashing: 'media',
@@ -110,8 +110,8 @@ export class NgCliWebpackConfig {
110110
}
111111

112112
// Fill in defaults from .angular-cli.json
113-
public mergeConfigs(buildOptions: BuildOptions, appConfig: any, projectRoot: string) {
114-
const mergeableOptions = {
113+
public mergeConfigs(buildOptions: T, appConfig: any, projectRoot: string): T {
114+
const mergeableOptions: Partial<BuildOptions> = {
115115
outputPath: path.resolve(projectRoot, appConfig.outDir),
116116
deployUrl: appConfig.deployUrl,
117117
baseHref: appConfig.baseHref

packages/@angular/cli/models/webpack-configs/development.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { NamedModulesPlugin } from 'webpack';
22

33
import { WebpackConfigOptions } from '../webpack-config';
44

5-
export const getDevConfig = function (_wco: WebpackConfigOptions) {
5+
export function getDevConfig(_wco: WebpackConfigOptions) {
66
return {
77
plugins: [new NamedModulesPlugin()]
88
};
9-
};
9+
}

packages/@angular/cli/models/webpack-configs/production.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { readTsconfig } from '../../utilities/read-tsconfig';
1414
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
1515

1616

17-
export const getProdConfig = function (wco: WebpackConfigOptions) {
17+
export function getProdConfig(wco: WebpackConfigOptions) {
1818
const { projectRoot, buildOptions, appConfig } = wco;
1919

2020
let extraPlugins: any[] = [];
@@ -159,4 +159,4 @@ export const getProdConfig = function (wco: WebpackConfigOptions) {
159159
...extraPlugins
160160
]
161161
};
162-
};
162+
}

packages/@angular/cli/models/webpack-configs/server.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { WebpackConfigOptions } from '../webpack-config';
44
* Returns a partial specific to creating a bundle for node
55
* @param _wco Options which are include the build options and app config
66
*/
7-
export const getServerConfig = function (_wco: WebpackConfigOptions) {
7+
export function getServerConfig(_wco: WebpackConfigOptions) {
88
return {
99
target: 'node',
1010
output: {
@@ -35,4 +35,4 @@ export const getServerConfig = function (_wco: WebpackConfigOptions) {
3535
}
3636
]
3737
};
38-
};
38+
}

packages/@angular/cli/models/webpack-configs/test.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import * as webpack from 'webpack';
44

55
import { CliConfig } from '../config';
66
import { WebpackTestOptions } from '../webpack-test-config';
7+
import { WebpackConfigOptions } from '../webpack-config';
78

89

910
/**
@@ -15,16 +16,14 @@ import { WebpackTestOptions } from '../webpack-test-config';
1516
*/
1617

1718

18-
export function getTestConfig(testConfig: WebpackTestOptions) {
19+
export function getTestConfig(wco: WebpackConfigOptions<WebpackTestOptions>) {
20+
const { projectRoot, buildOptions, appConfig } = wco;
1921

20-
const configPath = CliConfig.configFilePath();
21-
const projectRoot = path.dirname(configPath);
22-
const appConfig = CliConfig.fromProject().config.apps[0];
2322
const nodeModules = path.resolve(projectRoot, 'node_modules');
2423
const extraRules: any[] = [];
2524
const extraPlugins: any[] = [];
2625

27-
if (testConfig.codeCoverage && CliConfig.fromProject()) {
26+
if (buildOptions.codeCoverage && CliConfig.fromProject()) {
2827
const codeCoverageExclude = CliConfig.fromProject().get('test.codeCoverage.exclude');
2928
let exclude: (string | RegExp)[] = [
3029
/\.(e2e|spec)\.ts$/,
@@ -49,7 +48,7 @@ export function getTestConfig(testConfig: WebpackTestOptions) {
4948
}
5049

5150
return {
52-
devtool: testConfig.sourcemaps ? 'inline-source-map' : 'eval',
51+
devtool: buildOptions.sourcemaps ? 'inline-source-map' : 'eval',
5352
entry: {
5453
main: path.resolve(projectRoot, appConfig.root, appConfig.test)
5554
},

packages/@angular/cli/models/webpack-configs/typescript.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,17 @@ function _createAotPlugin(wco: WebpackConfigOptions, options: any) {
8383
}
8484
}
8585

86-
export const getNonAotConfig = function(wco: WebpackConfigOptions) {
86+
export function getNonAotConfig(wco: WebpackConfigOptions) {
8787
const { appConfig, projectRoot } = wco;
8888
const tsConfigPath = path.resolve(projectRoot, appConfig.root, appConfig.tsconfig);
8989

9090
return {
9191
module: { rules: [{ test: /\.ts$/, loader: webpackLoader }] },
9292
plugins: [ _createAotPlugin(wco, { tsConfigPath, skipCodeGeneration: true }) ]
9393
};
94-
};
94+
}
9595

96-
export const getAotConfig = function(wco: WebpackConfigOptions) {
96+
export function getAotConfig(wco: WebpackConfigOptions) {
9797
const { projectRoot, buildOptions, appConfig } = wco;
9898
const tsConfigPath = path.resolve(projectRoot, appConfig.root, appConfig.tsconfig);
9999
const testTsConfigPath = path.resolve(projectRoot, appConfig.root, appConfig.testTsconfig);
@@ -119,9 +119,9 @@ export const getAotConfig = function(wco: WebpackConfigOptions) {
119119
module: { rules: [{ test: /\.ts$/, use: [...boLoader, webpackLoader] }] },
120120
plugins: [ _createAotPlugin(wco, pluginOptions) ]
121121
};
122-
};
122+
}
123123

124-
export const getNonAotTestConfig = function(wco: WebpackConfigOptions) {
124+
export function getNonAotTestConfig(wco: WebpackConfigOptions) {
125125
const { projectRoot, appConfig } = wco;
126126
const tsConfigPath = path.resolve(projectRoot, appConfig.root, appConfig.testTsconfig);
127127
const appTsConfigPath = path.resolve(projectRoot, appConfig.root, appConfig.tsconfig);
@@ -137,4 +137,4 @@ export const getNonAotTestConfig = function(wco: WebpackConfigOptions) {
137137
module: { rules: [{ test: /\.ts$/, loader: webpackLoader }] },
138138
plugins: [ _createAotPlugin(wco, pluginOptions) ]
139139
};
140-
};
140+
}

packages/@angular/cli/models/webpack-test-config.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@ import {
1212
export interface WebpackTestOptions extends BuildOptions {
1313
codeCoverage?: boolean;
1414
}
15-
export class WebpackTestConfig extends NgCliWebpackConfig {
16-
constructor(private testOptions: WebpackTestOptions, appConfig: any) {
15+
export class WebpackTestConfig extends NgCliWebpackConfig<WebpackTestOptions> {
16+
constructor(testOptions: WebpackTestOptions, appConfig: any) {
1717
super(testOptions, appConfig);
1818
}
1919

2020
public buildConfig() {
21-
let webpackConfigs = [
21+
const webpackConfigs = [
2222
getCommonConfig(this.wco),
2323
getStylesConfig(this.wco),
2424
this.getTargetConfig(this.wco),
2525
getNonAotTestConfig(this.wco),
26-
getTestConfig(this.testOptions)
26+
getTestConfig(this.wco)
2727
];
2828

2929
this.config = webpackMerge(webpackConfigs);

0 commit comments

Comments
 (0)