diff --git a/packages/angular_devkit/build_angular/src/builders/karma/application_builder.ts b/packages/angular_devkit/build_angular/src/builders/karma/application_builder.ts index dce39e699eaf..8441bbc8dbad 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/application_builder.ts +++ b/packages/angular_devkit/build_angular/src/builders/karma/application_builder.ts @@ -338,7 +338,7 @@ async function initializeApplication( entryPoints, tsConfig: options.tsConfig, outputPath, - aot: false, + aot: options.aot, index: false, outputHashing: OutputHashing.None, optimization: false, diff --git a/packages/angular_devkit/build_angular/src/builders/karma/schema.json b/packages/angular_devkit/build_angular/src/builders/karma/schema.json index 24e74ab14212..c8ed717a90c8 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/schema.json +++ b/packages/angular_devkit/build_angular/src/builders/karma/schema.json @@ -276,6 +276,11 @@ "webWorkerTsConfig": { "type": "string", "description": "TypeScript configuration for Web Worker modules." + }, + "aot": { + "type": "boolean", + "description": "Run tests using Ahead of Time compilation.", + "default": false } }, "additionalProperties": false, diff --git a/packages/angular_devkit/build_angular/src/builders/karma/tests/options/aot_spec.ts b/packages/angular_devkit/build_angular/src/builders/karma/tests/options/aot_spec.ts new file mode 100644 index 000000000000..4019f98f42dc --- /dev/null +++ b/packages/angular_devkit/build_angular/src/builders/karma/tests/options/aot_spec.ts @@ -0,0 +1,47 @@ +/** + * @license + * Copyright Google LLC 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.dev/license + */ + +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; +import { BuilderMode } from '../../schema'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { + describe('Option: "aot"', () => { + it('enables aot', async () => { + await setupTarget(harness); + + await harness.writeFiles({ + 'src/aot.spec.ts': ` + import { Component } from '@angular/core'; + + describe('Hello', () => { + it('should *not* contain jit instructions', () => { + @Component({ + template: 'Hello', + }) + class Hello {} + + expect((Hello as any).ɵcmp.template.toString()).not.toContain('jit'); + }); + }); +`, + }); + + harness.useTarget('test', { + ...BASE_OPTIONS, + aot: true, + /** Cf. {@link ../builder-mode_spec.ts} */ + polyfills: ['zone.js', '@angular/localize/init', 'zone.js/testing'], + builderMode: BuilderMode.Application, + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + }); +});