Skip to content

Commit e3051d5

Browse files
committed
refactor(@schematics/angular): parameterize vitest browser provider tests
Combine separate playwright/webdriverio/preview tests into a single parameterized forEach block to reduce duplication and improve coverage.
1 parent 47237c2 commit e3051d5

File tree

1 file changed

+30
-44
lines changed

1 file changed

+30
-44
lines changed

packages/schematics/angular/vitest-browser/index_spec.ts

Lines changed: 30 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -35,36 +35,15 @@ describe('Vitest Browser Provider Schematic', () => {
3535
);
3636
});
3737

38-
it('should add dependencies and update tsconfig.spec.json', async () => {
39-
const options = {
40-
project: 'app',
41-
package: '@vitest/browser-playwright',
42-
skipInstall: true,
43-
};
44-
45-
const resultTree = await schematicRunner.runSchematic('vitest-browser', options, tree);
46-
47-
const packageJson = parse(resultTree.readContent('/package.json'));
48-
expect(packageJson.devDependencies['@vitest/browser-playwright']).toBeDefined();
49-
expect(packageJson.devDependencies['playwright']).toBeDefined();
50-
51-
const tsConfig = parse(resultTree.readContent('/projects/app/tsconfig.spec.json'));
52-
expect(tsConfig.compilerOptions.types).toContain('vitest/globals');
53-
expect(tsConfig.compilerOptions.types).toContain('@vitest/browser-playwright');
54-
expect(tsConfig.compilerOptions.types).not.toContain('jasmine');
55-
});
56-
57-
const browserProviderCases: { provider: string; expectedBrowser: string }[] = [
58-
{ provider: '@vitest/browser-playwright', expectedBrowser: 'chromium' },
59-
{ provider: '@vitest/browser-webdriverio', expectedBrowser: 'chrome' },
60-
{ provider: '@vitest/browser-preview', expectedBrowser: 'chromium' },
61-
];
62-
63-
for (const { provider, expectedBrowser } of browserProviderCases) {
64-
it(`should add browsers option to angular.json for ${provider}`, async () => {
38+
[
39+
{ pkg: '@vitest/browser-playwright', browser: 'chromium', extraDeps: ['playwright'] },
40+
{ pkg: '@vitest/browser-webdriverio', browser: 'chrome', extraDeps: ['webdriverio'] },
41+
{ pkg: '@vitest/browser-preview', browser: 'chromium', extraDeps: [] as string[] },
42+
].forEach(({ pkg, browser, extraDeps }) => {
43+
it(`should add ${browser} to browsers option in angular.json for ${pkg}`, async () => {
6544
const options = {
6645
project: 'app',
67-
package: provider,
46+
package: pkg,
6847
skipInstall: true,
6948
};
7049

@@ -73,9 +52,30 @@ describe('Vitest Browser Provider Schematic', () => {
7352
const angularJson = parse(resultTree.readContent('/angular.json'));
7453
const project = angularJson.projects.app;
7554
const targets = project.architect || project.targets;
76-
expect(targets.test.options.browsers).toEqual([expectedBrowser]);
55+
expect(targets.test.options.browsers).toEqual([browser]);
7756
});
78-
}
57+
58+
it(`should add dependencies and update tsconfig.spec.json for ${pkg}`, async () => {
59+
const options = {
60+
project: 'app',
61+
package: pkg,
62+
skipInstall: true,
63+
};
64+
65+
const resultTree = await schematicRunner.runSchematic('vitest-browser', options, tree);
66+
67+
const packageJson = parse(resultTree.readContent('/package.json'));
68+
expect(packageJson.devDependencies[pkg]).toBeDefined();
69+
for (const dep of extraDeps) {
70+
expect(packageJson.devDependencies[dep]).toBeDefined();
71+
}
72+
73+
const tsConfig = parse(resultTree.readContent('/projects/app/tsconfig.spec.json'));
74+
expect(tsConfig.compilerOptions.types).toContain('vitest/globals');
75+
expect(tsConfig.compilerOptions.types).toContain(pkg);
76+
expect(tsConfig.compilerOptions.types).not.toContain('jasmine');
77+
});
78+
});
7979

8080
it('should not overwrite existing browsers option in angular.json', async () => {
8181
// Set up existing browsers option
@@ -100,20 +100,6 @@ describe('Vitest Browser Provider Schematic', () => {
100100
expect(updatedTargets.test.options.browsers).toEqual(['firefox']);
101101
});
102102

103-
it('should add webdriverio dependency when @vitest/browser-webdriverio is used', async () => {
104-
const options = {
105-
project: 'app',
106-
package: '@vitest/browser-webdriverio',
107-
skipInstall: true,
108-
};
109-
110-
const resultTree = await schematicRunner.runSchematic('vitest-browser', options, tree);
111-
112-
const packageJson = parse(resultTree.readContent('/package.json'));
113-
expect(packageJson.devDependencies['@vitest/browser-webdriverio']).toBeDefined();
114-
expect(packageJson.devDependencies['webdriverio']).toBeDefined();
115-
});
116-
117103
it('should update tsconfig.spec.json for a library project', async () => {
118104
tree = await schematicRunner.runSchematic(
119105
'library',

0 commit comments

Comments
 (0)