Skip to content

Commit 04ff164

Browse files
committed
test(@angular-devkit/build-angular): cleanup budgets E2E test
1 parent 238438e commit 04ff164

File tree

2 files changed

+53
-82
lines changed

2 files changed

+53
-82
lines changed

packages/angular_devkit/build_angular/src/browser/index.ts

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -638,29 +638,30 @@ export function buildWebpackBrowser(
638638
}
639639
}
640640

641-
// Copy assets
642-
if (!options.watch && options.assets?.length) {
643-
spinner.start('Copying assets...');
644-
try {
645-
await copyAssets(
646-
normalizeAssetPatterns(
647-
options.assets,
648-
root,
649-
normalize(projectRoot),
650-
projectSourceRoot === undefined ? undefined : normalize(projectSourceRoot),
651-
),
652-
Array.from(outputPaths.values()),
653-
context.workspaceRoot,
654-
);
655-
spinner.succeed('Copying assets complete.');
656-
} catch (err) {
657-
spinner.fail(colors.redBright('Copying of assets failed.'));
641+
const buildSuccess = success && !statsHasErrors(webpackStats);
642+
if (buildSuccess) {
643+
// Copy assets
644+
if (!options.watch && options.assets?.length) {
645+
spinner.start('Copying assets...');
646+
try {
647+
await copyAssets(
648+
normalizeAssetPatterns(
649+
options.assets,
650+
root,
651+
normalize(projectRoot),
652+
projectSourceRoot === undefined ? undefined : normalize(projectSourceRoot),
653+
),
654+
Array.from(outputPaths.values()),
655+
context.workspaceRoot,
656+
);
657+
spinner.succeed('Copying assets complete.');
658+
} catch (err) {
659+
spinner.fail(colors.redBright('Copying of assets failed.'));
658660

659-
return { success: false, error: 'Unable to copy assets: ' + err.message };
661+
return { success: false, error: 'Unable to copy assets: ' + err.message };
662+
}
660663
}
661-
}
662664

663-
if (success) {
664665
if (options.index) {
665666
spinner.start('Generating index html...');
666667

@@ -737,7 +738,7 @@ export function buildWebpackBrowser(
737738

738739
webpackStatsLogger(context.logger, webpackStats, config, bundleInfoStats);
739740

740-
return { success: !statsHasErrors(webpackStats) };
741+
return { success: buildSuccess };
741742
}
742743
}),
743744
map(

tests/legacy-cli/e2e/tests/build/bundle-budgets.ts

Lines changed: 31 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -10,70 +10,40 @@ import { ng } from '../../utils/process';
1010
import { updateJsonFile } from '../../utils/project';
1111
import { expectToFail } from '../../utils/utils';
1212

13-
// tslint:disable:max-line-length
14-
export default function () {
15-
const budgetConfigs = [
16-
{
17-
expectation: 'pass',
18-
message: 'BIG max for all, should not error',
19-
budget: { type: 'allScript', maximumError: '100mb' },
20-
},
21-
{
22-
expectation: 'error',
23-
message: 'Budget error: all, max error',
24-
budget: { type: 'all', maximumError: '100b' },
25-
},
26-
{
27-
expectation: 'warning',
28-
message: 'Budget warning: all, min warning',
29-
budget: { type: 'all', minimumWarning: '100mb' },
30-
},
31-
];
13+
export default async function () {
14+
// Error
15+
await updateJsonFile('angular.json', json => {
16+
json.projects['test-project'].architect.build.options.budgets = [
17+
{ type: 'all', maximumError: '100b' },
18+
];
19+
});
20+
21+
const errorMessage = await expectToFail(() => ng('build'));
22+
if (!/Error.+budget/.test(errorMessage)) {
23+
throw new Error('Budget error: all, max error.');
24+
}
3225

33-
const promiseFactories = budgetConfigs.map(cfg => {
34-
if (cfg.expectation === 'error') {
35-
return () => {
36-
return updateJsonFile('angular.json', (json) => {
37-
json.projects['test-project'].architect.build.options.budgets = [cfg.budget];
38-
})
39-
.then(() => expectToFail(() => ng('build', '--optimization')))
40-
.then(errorMessage => {
41-
if (!/Error.+budgets/.test(errorMessage)) {
42-
throw new Error(cfg.message);
43-
}
44-
});
45-
};
46-
} else if (cfg.expectation === 'warning') {
47-
return () => {
48-
return updateJsonFile('angular.json', (json) => {
49-
json.projects['test-project'].architect.build.options.budgets = [cfg.budget];
50-
})
51-
.then(() => ng('build', '--optimization'))
52-
.then(({ stderr }) => {
53-
if (!/Warning.+budgets/.test(stderr)) {
54-
throw new Error(cfg.message);
55-
}
56-
});
57-
};
58-
} else { // pass
59-
return () => {
60-
return updateJsonFile('angular.json', (json) => {
61-
json.projects['test-project'].architect.build.options.budgets = [cfg.budget];
62-
})
63-
.then(() => ng('build', '--optimization'))
64-
.then(({ stderr }) => {
65-
if (/(Warning|Error)/.test(stderr)) {
66-
throw new Error(cfg.message);
67-
}
68-
});
69-
};
70-
}
26+
// Warning
27+
await updateJsonFile('angular.json', json => {
28+
json.projects['test-project'].architect.build.options.budgets = [
29+
{ type: 'all', minimumWarning: '100mb' },
30+
];
7131
});
7232

73-
let promiseChain = Promise.resolve();
74-
for (let i = 0; i < promiseFactories.length; i++) {
75-
promiseChain = promiseChain.then(promiseFactories[i]);
33+
const { stderr } = await ng('build');
34+
if (!/Warning.+budget/.test(stderr)) {
35+
throw new Error('Budget warning: all, min warning');
7636
}
7737

78-
return promiseChain;
38+
// Pass
39+
await updateJsonFile('angular.json', json => {
40+
json.projects['test-project'].architect.build.options.budgets = [
41+
{ type: 'allScript', maximumError: '100mb' },
42+
];
43+
});
44+
45+
const { stderr: stderr2 } = await ng('build');
46+
if (/(Warning|Error)/.test(stderr2)) {
47+
throw new Error('BIG max for all, should not error');
48+
}
7949
}

0 commit comments

Comments
 (0)