Skip to content

Commit 6330d9e

Browse files
authored
fix(angular): karma setup should be generated correctly for v14 (#14459)
1 parent 9f0a7f0 commit 6330d9e

File tree

7 files changed

+107
-5
lines changed

7 files changed

+107
-5
lines changed

packages/angular/src/generators/application/angular-v14/lib/update-config-files.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,4 +134,8 @@ function updateAppAndE2EProjectConfigurations(
134134
removeProjectConfiguration(host, options.e2eProjectName);
135135
}
136136
}
137+
138+
// delete some default test configs
139+
host.delete(`${options.appProjectRoot}/karma.conf.js`);
140+
host.delete(`${options.appProjectRoot}/src/test.ts`);
137141
}

packages/angular/src/generators/application/application.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,7 @@ export async function applicationGenerator(
5454
let previousGenerator = await import(
5555
join(__dirname, generatorDirectory, 'application')
5656
);
57-
await previousGenerator.default(tree, schema);
58-
return;
57+
return await previousGenerator.default(tree, schema);
5958
}
6059

6160
const options = normalizeOptions(tree, schema);

packages/angular/src/generators/karma-project/karma-project.spec.ts

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@ import type { Tree } from '@nrwl/devkit';
22
import * as devkit from '@nrwl/devkit';
33
import {
44
readProjectConfiguration,
5+
updateJson,
56
updateProjectConfiguration,
67
} from '@nrwl/devkit';
7-
import { createTreeWithEmptyV1Workspace } from '@nrwl/devkit/testing';
8+
import {
9+
createTreeWithEmptyV1Workspace,
10+
createTreeWithEmptyWorkspace,
11+
} from '@nrwl/devkit/testing';
812
import { karmaProjectGenerator } from './karma-project';
913
import libraryGenerator from '../library/library';
1014
import { Linter } from '@nrwl/linter';
@@ -274,5 +278,54 @@ describe('karmaProject', () => {
274278
).toMatchSnapshot();
275279
expect(tree.read('karma.conf.js', 'utf-8')).toMatchSnapshot();
276280
});
281+
282+
describe('--angular v14', () => {
283+
it('should generate the correct karma files for v14', async () => {
284+
// ARRANGE
285+
const tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
286+
updateJson(tree, 'package.json', (json) => ({
287+
...json,
288+
dependencies: {
289+
...json.dependencies,
290+
'@angular/core': '14.2.0',
291+
},
292+
}));
293+
294+
// ACT
295+
await applicationGenerator(tree, {
296+
name: 'app',
297+
unitTestRunner: UnitTestRunner.Karma,
298+
});
299+
300+
// ASSERT
301+
expect(tree.exists('apps/app/src/test.ts')).toBeTruthy();
302+
expect(tree.exists('apps/app/karma.conf.js')).toBeTruthy();
303+
expect(
304+
readProjectConfiguration(tree, 'app').targets.test.options.main
305+
).toEqual('apps/app/src/test.ts');
306+
expect(tree.read('apps/app/tsconfig.spec.json', 'utf-8'))
307+
.toMatchInlineSnapshot(`
308+
"{
309+
\\"extends\\": \\"./tsconfig.json\\",
310+
\\"compilerOptions\\": {
311+
\\"outDir\\": \\"../../dist/out-tsc\\",
312+
\\"types\\": [
313+
\\"jasmine\\",
314+
\\"node\\"
315+
]
316+
},
317+
\\"include\\": [
318+
\\"src/**/*.spec.ts\\",
319+
\\"src/**/*.test.ts\\",
320+
\\"src/**/*.d.ts\\"
321+
],
322+
\\"files\\": [
323+
\\"src/test.ts\\"
324+
]
325+
}
326+
"
327+
`);
328+
});
329+
});
277330
});
278331
});

packages/angular/src/generators/karma-project/lib/generate-karma-project-files.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import {
77
readProjectConfiguration,
88
} from '@nrwl/devkit';
99
import { tsquery } from '@phenomnomnominal/tsquery';
10+
import { getInstalledAngularVersionInfo } from '../../utils/angular-version-utils';
11+
import { v14TestFile } from './v14-test-file';
1012

1113
export function generateKarmaProjectFiles(tree: Tree, project: string): void {
1214
const projectConfig = readProjectConfiguration(tree, project);
@@ -49,6 +51,14 @@ export function generateKarmaProjectFiles(tree: Tree, project: string): void {
4951
}
5052
);
5153
}
54+
55+
const installedAngularVersion = getInstalledAngularVersionInfo(tree);
56+
if (installedAngularVersion.major === 14) {
57+
tree.write(
58+
joinPathFragments(projectConfig.sourceRoot, 'test.ts'),
59+
v14TestFile({ isLibrary: projectConfig.projectType === 'library' })
60+
);
61+
}
5262
}
5363

5464
function isWorkspaceWithProjectAtRoot(tree: Tree): boolean {

packages/angular/src/generators/karma-project/lib/update-tsconfig.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
readProjectConfiguration,
55
updateJson,
66
} from '@nrwl/devkit';
7+
import { getInstalledAngularVersionInfo } from '../../utils/angular-version-utils';
78

89
export function updateTsConfigs(tree: Tree, project: string): void {
910
const projectConfig = readProjectConfiguration(tree, project);
@@ -24,7 +25,9 @@ export function updateTsConfigs(tree: Tree, project: string): void {
2425
}
2526
);
2627

27-
let extraFiles: string[] = [];
28+
const installedAngularVersion = getInstalledAngularVersionInfo(tree);
29+
let extraFiles: string[] =
30+
installedAngularVersion.major === 14 ? ['src/test.ts'] : [];
2831
if (
2932
projectConfig.projectType == 'application' &&
3033
projectConfig.targets.build?.options?.polyfills &&
@@ -34,7 +37,7 @@ export function updateTsConfigs(tree: Tree, project: string): void {
3437
polyfillsPath = polyfillsPath.startsWith(projectConfig.root)
3538
? polyfillsPath.replace(`${projectConfig.root}/`, '')
3639
: polyfillsPath;
37-
extraFiles = [polyfillsPath];
40+
extraFiles = [...extraFiles, polyfillsPath];
3841
}
3942

4043
if (!extraFiles.length) {

packages/angular/src/generators/karma-project/lib/update-workspace-config.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,17 @@ import {
44
readProjectConfiguration,
55
updateProjectConfiguration,
66
} from '@nrwl/devkit';
7+
import { getInstalledAngularVersionInfo } from '../../utils/angular-version-utils';
78

89
export function updateWorkspaceConfig(tree: Tree, project: string): void {
10+
const installedAngularVersionInfo = getInstalledAngularVersionInfo(tree);
911
const projectConfig = readProjectConfiguration(tree, project);
1012
projectConfig.targets.test = {
1113
executor: '@angular-devkit/build-angular:karma',
1214
options: {
15+
...(installedAngularVersionInfo.major === 14
16+
? { main: joinPathFragments(projectConfig.sourceRoot, 'test.ts') }
17+
: {}),
1318
tsConfig: joinPathFragments(projectConfig.root, 'tsconfig.spec.json'),
1419
karmaConfig: joinPathFragments(projectConfig.root, 'karma.conf.js'),
1520
polyfills: ['zone.js', 'zone.js/testing'],
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
export const v14TestFile = (opts: {
2+
isLibrary: boolean;
3+
}) => `// This file is required by karma.conf.js and loads recursively all the .spec and framework files
4+
${
5+
opts.isLibrary
6+
? `
7+
import 'zone.js/dist/zone';
8+
`
9+
: ``
10+
}
11+
import 'zone.js/dist/zone-testing';
12+
import { getTestBed } from '@angular/core/testing';
13+
import {
14+
BrowserDynamicTestingModule,
15+
platformBrowserDynamicTesting
16+
} from '@angular/platform-browser-dynamic/testing';
17+
18+
declare const require: any;
19+
20+
// First, initialize the Angular testing environment.
21+
getTestBed().initTestEnvironment(
22+
BrowserDynamicTestingModule,
23+
platformBrowserDynamicTesting()
24+
);
25+
// Then we find all the tests.
26+
const context = require.context('./', true, /\.spec\.ts$/);
27+
// And load the modules.
28+
context.keys().map(context);`;

0 commit comments

Comments
 (0)