Skip to content

Commit ddeb959

Browse files
clydinfilipesilva
authored andcommitted
fix(@angular/cli): support app option for test command
1 parent 66faea6 commit ddeb959

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
@@ -13,16 +13,16 @@ import {
1313
} from './webpack-configs';
1414
import * as path from 'path';
1515

16-
export interface WebpackConfigOptions {
16+
export interface WebpackConfigOptions<T extends BuildOptions = BuildOptions> {
1717
projectRoot: string;
18-
buildOptions: BuildOptions;
18+
buildOptions: T;
1919
appConfig: any;
2020
}
2121

22-
export class NgCliWebpackConfig {
22+
export class NgCliWebpackConfig<T extends BuildOptions = BuildOptions> {
2323
public config: any;
24-
public wco: WebpackConfigOptions;
25-
constructor(buildOptions: BuildOptions, appConfig: any) {
24+
public wco: WebpackConfigOptions<T>;
25+
constructor(buildOptions: T, appConfig: any) {
2626

2727
this.validateBuildOptions(buildOptions);
2828

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

61-
public getTargetConfig(webpackConfigOptions: WebpackConfigOptions): any {
61+
public getTargetConfig(webpackConfigOptions: WebpackConfigOptions<T>): any {
6262
switch (webpackConfigOptions.buildOptions.target) {
6363
case 'development':
6464
return getDevConfig(webpackConfigOptions);
@@ -81,8 +81,8 @@ export class NgCliWebpackConfig {
8181
}
8282

8383
// Fill in defaults for build targets
84-
public addTargetDefaults(buildOptions: BuildOptions): BuildOptions {
85-
const targetDefaults: { [target: string]: BuildOptions } = {
84+
public addTargetDefaults(buildOptions: T): T {
85+
const targetDefaults: { [target: string]: Partial<BuildOptions> } = {
8686
development: {
8787
environment: 'dev',
8888
outputHashing: 'media',
@@ -105,8 +105,8 @@ export class NgCliWebpackConfig {
105105
}
106106

107107
// Fill in defaults from .angular-cli.json
108-
public mergeConfigs(buildOptions: BuildOptions, appConfig: any, projectRoot: string) {
109-
const mergeableOptions = {
108+
public mergeConfigs(buildOptions: T, appConfig: any, projectRoot: string): T {
109+
const mergeableOptions: Partial<BuildOptions> = {
110110
outputPath: path.resolve(projectRoot, appConfig.outDir),
111111
deployUrl: appConfig.deployUrl,
112112
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
@@ -10,7 +10,7 @@ import { GlobCopyWebpackPlugin } from '../../plugins/glob-copy-webpack-plugin';
1010
import { WebpackConfigOptions } from '../webpack-config';
1111

1212

13-
export const getProdConfig = function (wco: WebpackConfigOptions) {
13+
export function getProdConfig(wco: WebpackConfigOptions) {
1414
const { projectRoot, buildOptions, appConfig } = wco;
1515

1616
let extraPlugins: any[] = [];
@@ -127,4 +127,4 @@ export const getProdConfig = function (wco: WebpackConfigOptions) {
127127
})
128128
])
129129
};
130-
};
130+
}

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
@@ -76,17 +76,17 @@ function _createAotPlugin(wco: WebpackConfigOptions, options: any) {
7676
}, options));
7777
}
7878

79-
export const getNonAotConfig = function(wco: WebpackConfigOptions) {
79+
export function getNonAotConfig(wco: WebpackConfigOptions) {
8080
const { appConfig, projectRoot } = wco;
8181
const tsConfigPath = path.resolve(projectRoot, appConfig.root, appConfig.tsconfig);
8282

8383
return {
8484
module: { rules: [{ test: /\.ts$/, loader: webpackLoader }] },
8585
plugins: [ _createAotPlugin(wco, { tsConfigPath, skipCodeGeneration: true }) ]
8686
};
87-
};
87+
}
8888

89-
export const getAotConfig = function(wco: WebpackConfigOptions) {
89+
export function getAotConfig(wco: WebpackConfigOptions) {
9090
const { projectRoot, buildOptions, appConfig } = wco;
9191
const tsConfigPath = path.resolve(projectRoot, appConfig.root, appConfig.tsconfig);
9292
const testTsConfigPath = path.resolve(projectRoot, appConfig.root, appConfig.testTsconfig);
@@ -112,9 +112,9 @@ export const getAotConfig = function(wco: WebpackConfigOptions) {
112112
module: { rules: [{ test: /\.ts$/, use: [...boLoader, webpackLoader] }] },
113113
plugins: [ _createAotPlugin(wco, pluginOptions) ]
114114
};
115-
};
115+
}
116116

117-
export const getNonAotTestConfig = function(wco: WebpackConfigOptions) {
117+
export function getNonAotTestConfig(wco: WebpackConfigOptions) {
118118
const { projectRoot, appConfig } = wco;
119119
const tsConfigPath = path.resolve(projectRoot, appConfig.root, appConfig.testTsconfig);
120120
const appTsConfigPath = path.resolve(projectRoot, appConfig.root, appConfig.tsconfig);
@@ -130,4 +130,4 @@ export const getNonAotTestConfig = function(wco: WebpackConfigOptions) {
130130
module: { rules: [{ test: /\.ts$/, loader: webpackLoader }] },
131131
plugins: [ _createAotPlugin(wco, pluginOptions) ]
132132
};
133-
};
133+
}

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)