From a24c212203ee0f3301c381cc02737a20be5c0bb3 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 5 Mar 2021 11:45:50 -0500 Subject: [PATCH] test(@angular-devkit/build-angular): add dev-server builder build budget behavior tests This change adds expanded unit tests for the dev-server builder's build budget behavior using the builder test harness. --- .../src/dev-server/budgets_spec.ts | 35 ------------------- .../tests/behavior/build-budgets_spec.ts | 32 +++++++++++++++++ .../src/dev-server/tests/setup.ts | 7 +++- 3 files changed, 38 insertions(+), 36 deletions(-) delete mode 100644 packages/angular_devkit/build_angular/src/dev-server/budgets_spec.ts create mode 100644 packages/angular_devkit/build_angular/src/dev-server/tests/behavior/build-budgets_spec.ts diff --git a/packages/angular_devkit/build_angular/src/dev-server/budgets_spec.ts b/packages/angular_devkit/build_angular/src/dev-server/budgets_spec.ts deleted file mode 100644 index 735db97a68..0000000000 --- a/packages/angular_devkit/build_angular/src/dev-server/budgets_spec.ts +++ /dev/null @@ -1,35 +0,0 @@ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -import { normalize, virtualFs } from '@angular-devkit/core'; -import { createArchitect, host } from '../test-utils'; - -describe('Dev Server Builder bundle budgets', () => { - const targetSpec = { project: 'app', target: 'serve' }; - - beforeEach(async () => host.initialize().toPromise()); - afterEach(async () => host.restore().toPromise()); - - it('should ignore budgets', async () => { - const config = host.scopedSync().read(normalize('angular.json')); - const jsonConfig = JSON.parse(virtualFs.fileBufferToString(config)); - const buildOptions = jsonConfig.projects.app.targets.build.options; - - buildOptions.budgets = [{ type: 'all', maximumError: '100b' }], - buildOptions.optimization = true; - - host.writeMultipleFiles({ - 'angular.json': JSON.stringify(jsonConfig), - }); - - const architect = (await createArchitect(host.root())).architect; - const run = await architect.scheduleTarget(targetSpec); - const output = await run.result; - expect(output.success).toBe(true); - await run.stop(); - }); -}); diff --git a/packages/angular_devkit/build_angular/src/dev-server/tests/behavior/build-budgets_spec.ts b/packages/angular_devkit/build_angular/src/dev-server/tests/behavior/build-budgets_spec.ts new file mode 100644 index 0000000000..be50206199 --- /dev/null +++ b/packages/angular_devkit/build_angular/src/dev-server/tests/behavior/build-budgets_spec.ts @@ -0,0 +1,32 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +import { Type as BudgetType } from '../../../'; +import { serveWebpackBrowser } from '../../index'; +import { BASE_OPTIONS, DEV_SERVER_BUILDER_INFO, describeBuilder, setupBrowserTarget } from '../setup'; + +describeBuilder(serveWebpackBrowser, DEV_SERVER_BUILDER_INFO, (harness) => { + describe('Behavior: "browser builder budgets"', () => { + beforeEach(() => { + setupBrowserTarget(harness, { + // Add a budget error for any file over 100 bytes + budgets: [{ type: BudgetType.All, maximumError: '100b' }], + optimization: true, + }); + }); + + it('should ignore budgets defined in the "browserTarget" options', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + }); + + const { result } = await harness.executeOnce(); + + expect(result?.success).toBe(true); + }); + }); +}); diff --git a/packages/angular_devkit/build_angular/src/dev-server/tests/setup.ts b/packages/angular_devkit/build_angular/src/dev-server/tests/setup.ts index a40cf9b670..4c48b2a700 100644 --- a/packages/angular_devkit/build_angular/src/dev-server/tests/setup.ts +++ b/packages/angular_devkit/build_angular/src/dev-server/tests/setup.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ import { buildWebpackBrowser } from '../../browser'; +import { Schema as BrowserSchema } from '../../browser/schema'; import { BASE_OPTIONS as BROWSER_BASE_OPTIONS } from '../../browser/tests/setup'; import { BuilderHarness } from '../../testing/builder-harness'; import { Schema } from '../schema'; @@ -33,8 +34,12 @@ export const BASE_OPTIONS = Object.freeze({ */ export const BUILD_TIMEOUT = 15000; -export function setupBrowserTarget(harness: BuilderHarness): void { +export function setupBrowserTarget( + harness: BuilderHarness, + extraOptions?: Partial, +): void { harness.withBuilderTarget('build', buildWebpackBrowser, { ...BROWSER_BASE_OPTIONS, + ...extraOptions, }); }