Skip to content

Commit

Permalink
feat(@angular-devkit/build-angular): karma builder main option is n…
Browse files Browse the repository at this point in the history
…ow optional

The Karma builder `main` option is now optional. The default test bootstrapping is injected automatically in the bundle.
  • Loading branch information
alan-agius4 committed Sep 27, 2022
1 parent 05e6f24 commit 05a98c0
Show file tree
Hide file tree
Showing 11 changed files with 34 additions and 55 deletions.
2 changes: 1 addition & 1 deletion goldens/public-api/angular_devkit/build_angular/index.md
Expand Up @@ -178,7 +178,7 @@ export interface KarmaBuilderOptions {
include?: string[];
inlineStyleLanguage?: InlineStyleLanguage_2;
karmaConfig: string;
main: string;
main?: string;
poll?: number;
polyfills?: Polyfills_2;
preserveSymlinks?: boolean;
Expand Down
31 changes: 31 additions & 0 deletions packages/angular_devkit/build_angular/src/builders/karma/index.ts
Expand Up @@ -111,6 +111,17 @@ export function execute(
throw new Error('The builder requires a target.');
}

if (!options.main) {
webpackConfig.entry ??= {};
if (typeof webpackConfig.entry === 'object' && !Array.isArray(webpackConfig.entry)) {
if (Array.isArray(webpackConfig.entry['main'])) {
webpackConfig.entry['main'].push(getBuiltInMainFile());
} else {
webpackConfig.entry['main'] = [getBuiltInMainFile()];
}
}
}

const projectMetadata = await context.getProjectMetadata(projectName);
const sourceRoot = (projectMetadata.sourceRoot ?? projectMetadata.root ?? '') as string;

Expand Down Expand Up @@ -169,3 +180,23 @@ export function execute(

export { KarmaBuilderOptions };
export default createBuilder<Record<string, string> & KarmaBuilderOptions>(execute);

function getBuiltInMainFile(): string {
const content = Buffer.from(
`
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting,
} from '@angular/platform-browser-dynamic/testing';
// Initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), {
errorOnUnknownElements: true,
errorOnUnknownProperties: true
});
`,
).toString('base64');

return `ng-virtual-main.js!=!data:text/javascript;base64,${content}`;
}
Expand Up @@ -255,7 +255,7 @@
}
},
"additionalProperties": false,
"required": ["main", "tsConfig", "karmaConfig"],
"required": ["tsConfig", "karmaConfig"],
"definitions": {
"assetPattern": {
"oneOf": [
Expand Down
Expand Up @@ -20,7 +20,6 @@ export const KARMA_BUILDER_INFO = Object.freeze({
* Also disables progress reporting to minimize logging output.
*/
export const BASE_OPTIONS = Object.freeze<Schema>({
main: 'src/test.ts',
polyfills: 'src/polyfills.ts',
tsConfig: 'src/tsconfig.spec.json',
karmaConfig: 'karma.conf.js',
Expand Down
Expand Up @@ -130,7 +130,7 @@ export async function getCommonConfig(wco: WebpackConfigOptions): Promise<Config
if (Array.isArray(entryPoints['main'])) {
entryPoints['main'].unshift(zoneTestingEntryPoint);
} else {
entryPoints['main'] = [zoneTestingEntryPoint, entryPoints['main'] as string];
entryPoints['main'] = [zoneTestingEntryPoint];
}
}
}
Expand Down
Expand Up @@ -117,7 +117,6 @@
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.spec.json",
"karmaConfig": "karma.conf.js",
Expand Down

This file was deleted.

Expand Up @@ -7,7 +7,6 @@
]
},
"files": [
"test.ts",
"polyfills.ts"
],
"include": [
Expand Down

This file was deleted.

Expand Up @@ -7,7 +7,6 @@
"types": []
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}
Expand Up @@ -6,9 +6,6 @@
"jasmine"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
Expand Down

0 comments on commit 05a98c0

Please sign in to comment.