Skip to content

Commit 05a98c0

Browse files
committed
feat(@angular-devkit/build-angular): karma builder main option is now optional
The Karma builder `main` option is now optional. The default test bootstrapping is injected automatically in the bundle.
1 parent 05e6f24 commit 05a98c0

File tree

11 files changed

+34
-55
lines changed

11 files changed

+34
-55
lines changed

goldens/public-api/angular_devkit/build_angular/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ export interface KarmaBuilderOptions {
178178
include?: string[];
179179
inlineStyleLanguage?: InlineStyleLanguage_2;
180180
karmaConfig: string;
181-
main: string;
181+
main?: string;
182182
poll?: number;
183183
polyfills?: Polyfills_2;
184184
preserveSymlinks?: boolean;

packages/angular_devkit/build_angular/src/builders/karma/index.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,17 @@ export function execute(
111111
throw new Error('The builder requires a target.');
112112
}
113113

114+
if (!options.main) {
115+
webpackConfig.entry ??= {};
116+
if (typeof webpackConfig.entry === 'object' && !Array.isArray(webpackConfig.entry)) {
117+
if (Array.isArray(webpackConfig.entry['main'])) {
118+
webpackConfig.entry['main'].push(getBuiltInMainFile());
119+
} else {
120+
webpackConfig.entry['main'] = [getBuiltInMainFile()];
121+
}
122+
}
123+
}
124+
114125
const projectMetadata = await context.getProjectMetadata(projectName);
115126
const sourceRoot = (projectMetadata.sourceRoot ?? projectMetadata.root ?? '') as string;
116127

@@ -169,3 +180,23 @@ export function execute(
169180

170181
export { KarmaBuilderOptions };
171182
export default createBuilder<Record<string, string> & KarmaBuilderOptions>(execute);
183+
184+
function getBuiltInMainFile(): string {
185+
const content = Buffer.from(
186+
`
187+
import { getTestBed } from '@angular/core/testing';
188+
import {
189+
BrowserDynamicTestingModule,
190+
platformBrowserDynamicTesting,
191+
} from '@angular/platform-browser-dynamic/testing';
192+
193+
// Initialize the Angular testing environment.
194+
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), {
195+
errorOnUnknownElements: true,
196+
errorOnUnknownProperties: true
197+
});
198+
`,
199+
).toString('base64');
200+
201+
return `ng-virtual-main.js!=!data:text/javascript;base64,${content}`;
202+
}

packages/angular_devkit/build_angular/src/builders/karma/schema.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@
255255
}
256256
},
257257
"additionalProperties": false,
258-
"required": ["main", "tsConfig", "karmaConfig"],
258+
"required": ["tsConfig", "karmaConfig"],
259259
"definitions": {
260260
"assetPattern": {
261261
"oneOf": [

packages/angular_devkit/build_angular/src/builders/karma/tests/setup.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ export const KARMA_BUILDER_INFO = Object.freeze({
2020
* Also disables progress reporting to minimize logging output.
2121
*/
2222
export const BASE_OPTIONS = Object.freeze<Schema>({
23-
main: 'src/test.ts',
2423
polyfills: 'src/polyfills.ts',
2524
tsConfig: 'src/tsconfig.spec.json',
2625
karmaConfig: 'karma.conf.js',

packages/angular_devkit/build_angular/src/webpack/configs/common.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ export async function getCommonConfig(wco: WebpackConfigOptions): Promise<Config
130130
if (Array.isArray(entryPoints['main'])) {
131131
entryPoints['main'].unshift(zoneTestingEntryPoint);
132132
} else {
133-
entryPoints['main'] = [zoneTestingEntryPoint, entryPoints['main'] as string];
133+
entryPoints['main'] = [zoneTestingEntryPoint];
134134
}
135135
}
136136
}

packages/angular_devkit/build_angular/test/hello-world-app/angular.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@
117117
"test": {
118118
"builder": "@angular-devkit/build-angular:karma",
119119
"options": {
120-
"main": "src/test.ts",
121120
"polyfills": "src/polyfills.ts",
122121
"tsConfig": "src/tsconfig.spec.json",
123122
"karmaConfig": "karma.conf.js",

packages/angular_devkit/build_angular/test/hello-world-app/src/test.ts

Lines changed: 0 additions & 22 deletions
This file was deleted.

packages/angular_devkit/build_angular/test/hello-world-app/src/tsconfig.spec.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
]
88
},
99
"files": [
10-
"test.ts",
1110
"polyfills.ts"
1211
],
1312
"include": [

packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/src/test.ts

Lines changed: 0 additions & 23 deletions
This file was deleted.

packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/tsconfig.lib.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
"types": []
88
},
99
"exclude": [
10-
"src/test.ts",
1110
"**/*.spec.ts"
1211
]
1312
}

0 commit comments

Comments
 (0)