Skip to content

Commit 12332c5

Browse files
committed
feat(angular): generate vitest unit test runner by default
1 parent 04e0114 commit 12332c5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1227
-417
lines changed

e2e/angular/src/config.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ describe('angular.json v1 config', () => {
1414
beforeAll(() => {
1515
newProject({ packages: ['@nx/angular'] });
1616
runCLI(
17-
`generate @nx/angular:app ${app1} --bundler=webpack --no-interactive`
17+
`generate @nx/angular:app ${app1} --bundler=webpack --unit-test-runner=jest --no-interactive`
1818
);
1919
// reset workspace to use v1 config
2020
updateFile(`angular.json`, angularV1Json(app1));

e2e/angular/src/misc.test.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ describe('Move Angular Project', () => {
2020
app1 = uniq('app1');
2121
app2 = uniq('app2');
2222
newPath = `subfolder/${app2}`;
23-
runCLI(`generate @nx/angular:app ${app1} --no-interactive`);
23+
runCLI(
24+
`generate @nx/angular:app ${app1} --unit-test-runner=jest --no-interactive`
25+
);
2426
});
2527

2628
afterAll(() => cleanupProject());
@@ -93,13 +95,17 @@ describe('Move Angular Project', () => {
9395
it('should work for libraries', () => {
9496
const lib1 = uniq('mylib');
9597
const lib2 = uniq('mylib');
96-
runCLI(`generate @nx/angular:lib ${lib1} --no-standalone --no-interactive`);
98+
runCLI(
99+
`generate @nx/angular:lib ${lib1} --unit-test-runner=jest --no-standalone --no-interactive`
100+
);
97101

98102
/**
99103
* Create a library which imports the module from the other lib
100104
*/
101105

102-
runCLI(`generate @nx/angular:lib ${lib2} --no-standalone --no-interactive`);
106+
runCLI(
107+
`generate @nx/angular:lib ${lib2} --unit-test-runner=jest --no-standalone --no-interactive`
108+
);
103109

104110
updateFile(
105111
`${lib2}/src/lib/${lib2}-module.ts`,

e2e/angular/src/ngrx.test.ts

Lines changed: 85 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -8,105 +8,103 @@ import {
88
uniq,
99
} from '@nx/e2e-utils';
1010

11-
describe('Angular Package', () => {
12-
describe('ngrx', () => {
13-
beforeAll(() => {
14-
newProject({ packages: ['@nx/angular'] });
15-
});
16-
afterAll(() => {
17-
cleanupProject();
18-
});
11+
describe('NgRx', () => {
12+
beforeAll(() => {
13+
newProject({ packages: ['@nx/angular'] });
14+
});
15+
afterAll(() => {
16+
cleanupProject();
17+
});
1918

20-
it('should work', async () => {
21-
const myapp = uniq('myapp');
22-
runCLI(
23-
`generate @nx/angular:app ${myapp} --no-standalone --no-interactive`
24-
);
19+
it('should work', async () => {
20+
const myapp = uniq('myapp');
21+
runCLI(
22+
`generate @nx/angular:app ${myapp} --no-standalone --no-interactive`
23+
);
2524

26-
// Generate root ngrx state management
27-
runCLI(
28-
`generate @nx/angular:ngrx users --parent=${myapp}/src/app/app-module.ts --root --minimal=false`
29-
);
30-
const packageJson = readJson('package.json');
31-
expect(packageJson.dependencies['@ngrx/store']).toBeDefined();
32-
expect(packageJson.dependencies['@ngrx/effects']).toBeDefined();
33-
expect(packageJson.dependencies['@ngrx/router-store']).toBeDefined();
34-
expect(packageJson.devDependencies['@ngrx/store-devtools']).toBeDefined();
25+
// Generate root ngrx state management
26+
runCLI(
27+
`generate @nx/angular:ngrx users --parent=${myapp}/src/app/app-module.ts --root --minimal=false`
28+
);
29+
const packageJson = readJson('package.json');
30+
expect(packageJson.dependencies['@ngrx/store']).toBeDefined();
31+
expect(packageJson.dependencies['@ngrx/effects']).toBeDefined();
32+
expect(packageJson.dependencies['@ngrx/router-store']).toBeDefined();
33+
expect(packageJson.devDependencies['@ngrx/store-devtools']).toBeDefined();
3534

36-
const mylib = uniq('mylib');
37-
// Generate feature library and ngrx state within that library
38-
runCLI(`g @nx/angular:lib ${mylib} --prefix=fl --no-standalone`);
39-
runCLI(
40-
`generate @nx/angular:ngrx flights --parent=${mylib}/src/lib/${mylib}-module.ts --facade`
41-
);
35+
const mylib = uniq('mylib');
36+
// Generate feature library and ngrx state within that library
37+
runCLI(`g @nx/angular:lib ${mylib} --prefix=fl --no-standalone`);
38+
runCLI(
39+
`generate @nx/angular:ngrx flights --parent=${mylib}/src/lib/${mylib}-module.ts --facade`
40+
);
4241

43-
expect(runCLI(`build ${myapp}`)).toMatch(/main-[a-zA-Z0-9]+\.js/);
44-
expectTestsPass(await runCLIAsync(`test ${myapp} --no-watch`));
45-
expectTestsPass(await runCLIAsync(`test ${mylib} --no-watch`));
46-
}, 1000000);
42+
expect(runCLI(`build ${myapp}`)).toMatch(/main-[a-zA-Z0-9]+\.js/);
43+
expectTestsPass(await runCLIAsync(`test ${myapp} --no-watch`));
44+
expectTestsPass(await runCLIAsync(`test ${mylib} --no-watch`));
45+
}, 1000000);
4746

48-
it('should work with creators', async () => {
49-
const myapp = uniq('myapp');
50-
runCLI(
51-
`generate @nx/angular:app ${myapp} --routing --no-standalone --no-interactive`
52-
);
47+
it('should work with creators', async () => {
48+
const myapp = uniq('myapp');
49+
runCLI(
50+
`generate @nx/angular:app ${myapp} --routing --no-standalone --no-interactive`
51+
);
5352

54-
// Generate root ngrx state management
55-
runCLI(
56-
`generate @nx/angular:ngrx users --parent=${myapp}/src/app/app-module.ts --root`
57-
);
58-
const packageJson = readJson('package.json');
59-
expect(packageJson.dependencies['@ngrx/entity']).toBeDefined();
60-
expect(packageJson.dependencies['@ngrx/store']).toBeDefined();
61-
expect(packageJson.dependencies['@ngrx/effects']).toBeDefined();
62-
expect(packageJson.dependencies['@ngrx/router-store']).toBeDefined();
63-
expect(packageJson.devDependencies['@ngrx/schematics']).toBeDefined();
64-
expect(packageJson.devDependencies['@ngrx/store-devtools']).toBeDefined();
53+
// Generate root ngrx state management
54+
runCLI(
55+
`generate @nx/angular:ngrx users --parent=${myapp}/src/app/app-module.ts --root`
56+
);
57+
const packageJson = readJson('package.json');
58+
expect(packageJson.dependencies['@ngrx/entity']).toBeDefined();
59+
expect(packageJson.dependencies['@ngrx/store']).toBeDefined();
60+
expect(packageJson.dependencies['@ngrx/effects']).toBeDefined();
61+
expect(packageJson.dependencies['@ngrx/router-store']).toBeDefined();
62+
expect(packageJson.devDependencies['@ngrx/schematics']).toBeDefined();
63+
expect(packageJson.devDependencies['@ngrx/store-devtools']).toBeDefined();
6564

66-
const mylib = uniq('mylib');
67-
// Generate feature library and ngrx state within that library
68-
runCLI(`g @nx/angular:lib ${mylib} --prefix=fl --no-standalone`);
65+
const mylib = uniq('mylib');
66+
// Generate feature library and ngrx state within that library
67+
runCLI(`g @nx/angular:lib ${mylib} --prefix=fl --no-standalone`);
6968

70-
const flags = `--facade --barrels`;
71-
runCLI(
72-
`generate @nx/angular:ngrx flights --parent=${mylib}/src/lib/${mylib}-module.ts ${flags}`
73-
);
69+
const flags = `--facade --barrels`;
70+
runCLI(
71+
`generate @nx/angular:ngrx flights --parent=${mylib}/src/lib/${mylib}-module.ts ${flags}`
72+
);
7473

75-
expect(runCLI(`build ${myapp}`)).toMatch(/main-[a-zA-Z0-9]+\.js/);
76-
expectTestsPass(await runCLIAsync(`test ${myapp} --no-watch`));
77-
expectTestsPass(await runCLIAsync(`test ${mylib} --no-watch`));
78-
}, 1000000);
74+
expect(runCLI(`build ${myapp}`)).toMatch(/main-[a-zA-Z0-9]+\.js/);
75+
expectTestsPass(await runCLIAsync(`test ${myapp} --no-watch`));
76+
expectTestsPass(await runCLIAsync(`test ${mylib} --no-watch`));
77+
}, 1000000);
7978

80-
it('should work with creators using --module', async () => {
81-
const myapp = uniq('myapp');
82-
runCLI(
83-
`generate @nx/angular:app ${myapp} --routing --no-standalone --no-interactive`
84-
);
79+
it('should work with creators using --module', async () => {
80+
const myapp = uniq('myapp');
81+
runCLI(
82+
`generate @nx/angular:app ${myapp} --routing --no-standalone --no-interactive`
83+
);
8584

86-
// Generate root ngrx state management
87-
runCLI(
88-
`generate @nx/angular:ngrx users --parent=${myapp}/src/app/app-module.ts --root`
89-
);
90-
const packageJson = readJson('package.json');
91-
expect(packageJson.dependencies['@ngrx/entity']).toBeDefined();
92-
expect(packageJson.dependencies['@ngrx/store']).toBeDefined();
93-
expect(packageJson.dependencies['@ngrx/effects']).toBeDefined();
94-
expect(packageJson.dependencies['@ngrx/router-store']).toBeDefined();
95-
expect(packageJson.devDependencies['@ngrx/schematics']).toBeDefined();
96-
expect(packageJson.devDependencies['@ngrx/store-devtools']).toBeDefined();
85+
// Generate root ngrx state management
86+
runCLI(
87+
`generate @nx/angular:ngrx users --parent=${myapp}/src/app/app-module.ts --root`
88+
);
89+
const packageJson = readJson('package.json');
90+
expect(packageJson.dependencies['@ngrx/entity']).toBeDefined();
91+
expect(packageJson.dependencies['@ngrx/store']).toBeDefined();
92+
expect(packageJson.dependencies['@ngrx/effects']).toBeDefined();
93+
expect(packageJson.dependencies['@ngrx/router-store']).toBeDefined();
94+
expect(packageJson.devDependencies['@ngrx/schematics']).toBeDefined();
95+
expect(packageJson.devDependencies['@ngrx/store-devtools']).toBeDefined();
9796

98-
const mylib = uniq('mylib');
99-
// Generate feature library and ngrx state within that library
100-
runCLI(`g @nx/angular:lib ${mylib} --prefix=fl --no-standalone`);
97+
const mylib = uniq('mylib');
98+
// Generate feature library and ngrx state within that library
99+
runCLI(`g @nx/angular:lib ${mylib} --prefix=fl --no-standalone`);
101100

102-
const flags = `--facade --barrels`;
103-
runCLI(
104-
`generate @nx/angular:ngrx flights --module=${mylib}/src/lib/${mylib}-module.ts ${flags}`
105-
);
101+
const flags = `--facade --barrels`;
102+
runCLI(
103+
`generate @nx/angular:ngrx flights --module=${mylib}/src/lib/${mylib}-module.ts ${flags}`
104+
);
106105

107-
expect(runCLI(`build ${myapp}`)).toMatch(/main-[a-zA-Z0-9]+\.js/);
108-
expectTestsPass(await runCLIAsync(`test ${myapp} --no-watch`));
109-
expectTestsPass(await runCLIAsync(`test ${mylib} --no-watch`));
110-
}, 1000000);
111-
});
106+
expect(runCLI(`build ${myapp}`)).toMatch(/main-[a-zA-Z0-9]+\.js/);
107+
expectTestsPass(await runCLIAsync(`test ${myapp} --no-watch`));
108+
expectTestsPass(await runCLIAsync(`test ${mylib} --no-watch`));
109+
}, 1000000);
112110
});

packages/angular/executors.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@
3939
"implementation": "./src/executors/extract-i18n/extract-i18n.impl",
4040
"schema": "./src/executors/extract-i18n/schema.json",
4141
"description": "Extracts i18n messages from source code."
42+
},
43+
"unit-test": {
44+
"implementation": "./src/executors/unit-test/unit-test.impl",
45+
"schema": "./src/executors/unit-test/schema.json",
46+
"description": "Run application unit tests. _Note: this is only supported in Angular versions >= 21.0.0_."
4247
}
4348
},
4449
"builders": {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import type { UnitTestBuilderOptions } from '@angular/build';
2+
import type { PluginSpec } from '../utilities/esbuild-extensions';
3+
4+
export interface UnitTestExecutorOptions extends UnitTestBuilderOptions {
5+
indexHtmlTransformer?: string;
6+
plugins?: string[] | PluginSpec[];
7+
}

0 commit comments

Comments
 (0)