Skip to content

Commit f72e8da

Browse files
alan-agius4dgp1130
authored andcommitted
test: improve vitest e2e test stability and performance
- Use Chrome binary from `rules_browsers` for Playwright in Vitest browser tests for hermetic testing and avoids re-downloads of chrome. - Batch `ng generate` commands in e2e tests to improve performance. - Remove now redundant chromium install commands from e2e tests.
1 parent 08f88eb commit f72e8da

File tree

3 files changed

+42
-35
lines changed

3 files changed

+42
-35
lines changed

tests/legacy-cli/e2e/tests/vitest/browser-no-globals.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import assert from 'node:assert/strict';
22
import { writeFile } from '../../utils/fs';
33
import { installPackage } from '../../utils/packages';
4-
import { exec, ng } from '../../utils/process';
4+
import { ng } from '../../utils/process';
55
import { applyVitestBuilder } from '../../utils/vitest';
66

77
/**
@@ -14,8 +14,6 @@ export default async function (): Promise<void> {
1414
await installPackage('playwright@1');
1515
await installPackage('@vitest/browser-playwright@4');
1616

17-
await exec('npx', 'playwright', 'install', 'chromium', '--only-shell');
18-
1917
await writeFile(
2018
'src/app/app.spec.ts',
2119
`

tests/legacy-cli/e2e/tests/vitest/browser-playwright.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import assert from 'node:assert/strict';
22
import { applyVitestBuilder } from '../../utils/vitest';
3-
import { exec, ng } from '../../utils/process';
3+
import { ng } from '../../utils/process';
44
import { installPackage } from '../../utils/packages';
55
import { writeFile } from '../../utils/fs';
66

77
export default async function (): Promise<void> {
88
await applyVitestBuilder();
99
await installPackage('playwright@1');
1010
await installPackage('@vitest/browser-playwright@4');
11-
await exec('npx', 'playwright', 'install', 'chromium', '--only-shell');
12-
1311
await ng('generate', 'component', 'my-comp');
1412

1513
await writeFile(

tests/legacy-cli/e2e/tests/vitest/larger-project-coverage.ts

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { ng } from '../../utils/process';
22
import { applyVitestBuilder } from '../../utils/vitest';
33
import assert from 'node:assert';
44
import { installPackage } from '../../utils/packages';
5-
import { exec } from '../../utils/process';
65
import { updateJsonFile } from '../../utils/project';
76
import { readFile } from '../../utils/fs';
87

@@ -27,33 +26,7 @@ export default async function () {
2726

2827
const artifactCount = 100;
2928
const initialTestCount = 1;
30-
const generatedFiles: string[] = [];
31-
32-
// Generate a mix of components, services, and pipes
33-
for (let i = 0; i < artifactCount; i++) {
34-
const type = i % 3;
35-
const name = `test-artifact${i}`;
36-
let generateType;
37-
let fileSuffix;
38-
39-
switch (type) {
40-
case 0:
41-
generateType = 'component';
42-
fileSuffix = '.ts';
43-
break;
44-
case 1:
45-
generateType = 'service';
46-
fileSuffix = '.ts';
47-
break;
48-
default:
49-
generateType = 'pipe';
50-
fileSuffix = '-pipe.ts';
51-
break;
52-
}
53-
54-
await ng('generate', generateType, name, '--skip-tests=false');
55-
generatedFiles.push(`${name}${fileSuffix}`);
56-
}
29+
const generatedFiles = await generateArtifactsInBatches(artifactCount);
5730

5831
const totalTests = initialTestCount + artifactCount;
5932
const expectedMessage = new RegExp(`${totalTests} passed`);
@@ -78,7 +51,6 @@ export default async function () {
7851
// Setup for browser mode
7952
await installPackage('playwright@1');
8053
await installPackage('@vitest/browser-playwright@4');
81-
await exec('npx', 'playwright', 'install', 'chromium', '--only-shell');
8254

8355
// Run tests in browser mode with coverage
8456
const { stdout: browserStdout } = await ng(
@@ -102,3 +74,42 @@ export default async function () {
10274
assert.ok(found, `Expected ${file} to be in the browser coverage report.`);
10375
}
10476
}
77+
78+
async function generateArtifactsInBatches(artifactCount: number): Promise<string[]> {
79+
const BATCH_SIZE = 5;
80+
const generatedFiles: string[] = [];
81+
let commands: Promise<any>[] = [];
82+
83+
for (let i = 0; i < artifactCount; i++) {
84+
const type = i % 3;
85+
const name = `test-artifact-${i}`;
86+
87+
let generateType: string;
88+
let fileSuffix: string;
89+
90+
switch (type) {
91+
case 0:
92+
generateType = 'component';
93+
fileSuffix = '.ts';
94+
break;
95+
case 1:
96+
generateType = 'service';
97+
fileSuffix = '.ts';
98+
break;
99+
default:
100+
generateType = 'pipe';
101+
fileSuffix = '-pipe.ts';
102+
break;
103+
}
104+
105+
commands.push(ng('generate', generateType, name, '--skip-tests=false'));
106+
generatedFiles.push(`${name}${fileSuffix}`);
107+
108+
if (commands.length === BATCH_SIZE || i === artifactCount - 1) {
109+
await Promise.all(commands);
110+
commands = [];
111+
}
112+
}
113+
114+
return generatedFiles;
115+
}

0 commit comments

Comments
 (0)