diff --git a/modules/testing/builder/package.json b/modules/testing/builder/package.json index ee6fa056bbfe..27e7eef758ca 100644 --- a/modules/testing/builder/package.json +++ b/modules/testing/builder/package.json @@ -4,9 +4,9 @@ "@angular-devkit/architect": "workspace:*", "@angular/ssr": "workspace:*", "@angular-devkit/build-angular": "workspace:*", - "@vitest/coverage-v8": "4.0.0", + "@vitest/coverage-v8": "4.0.6", "jsdom": "27.0.1", "rxjs": "7.8.2", - "vitest": "4.0.0" + "vitest": "4.0.6" } } diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index f49ebe26c93f..e38f62a1be97 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -56,7 +56,7 @@ "ng-packagr": "21.0.0-rc.0", "postcss": "8.5.6", "rxjs": "7.8.2", - "vitest": "4.0.0" + "vitest": "4.0.6" }, "peerDependencies": { "@angular/core": "0.0.0-ANGULAR-FW-PEER-DEP", @@ -74,7 +74,7 @@ "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", "tslib": "^2.3.0", "typescript": ">=5.9 <6.0", - "vitest": "^4.0.0" + "vitest": "^4.0.6" }, "peerDependenciesMeta": { "@angular/core": { diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts index f7ff75c82d70..7e1e931f6c3a 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts @@ -143,9 +143,7 @@ export class VitestExecutor implements TestExecutor { } = this.options; let vitestNodeModule; - let vitestCoverageModule; try { - vitestCoverageModule = await import('vitest/coverage'); vitestNodeModule = await import('vitest/node'); } catch (error: unknown) { assertIsError(error); @@ -158,21 +156,6 @@ export class VitestExecutor implements TestExecutor { } const { startVitest } = vitestNodeModule; - // Augment BaseCoverageProvider to include logic to support the built virtual files. - // Temporary workaround to avoid the direct filesystem checks in the base provider that - // were introduced in v4. Also ensures that all built virtual files are available. - const builtVirtualFiles = this.buildResultFiles; - vitestCoverageModule.BaseCoverageProvider.prototype.isIncluded = function (filename) { - const relativeFilename = path.relative(workspaceRoot, filename); - if (!this.options.include || builtVirtualFiles.has(relativeFilename)) { - return !isMatch(relativeFilename, this.options.exclude); - } else { - return isMatch(relativeFilename, this.options.include, { - ignore: this.options.exclude, - }); - } - }; - // Setup vitest browser options if configured const browserOptions = await setupBrowserConfiguration( browsers, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 79b7ac4cb1d4..4f72f75dd728 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -332,8 +332,8 @@ importers: specifier: workspace:* version: link:../../../packages/angular/ssr '@vitest/coverage-v8': - specifier: 4.0.0 - version: 4.0.0(vitest@4.0.0(@types/node@24.9.2)(jiti@2.6.1)(jsdom@27.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + specifier: 4.0.6 + version: 4.0.6(vitest@4.0.6(@types/node@24.9.2)(jiti@2.6.1)(jsdom@27.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) jsdom: specifier: 27.0.1 version: 27.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -341,8 +341,8 @@ importers: specifier: 7.8.2 version: 7.8.2 vitest: - specifier: 4.0.0 - version: 4.0.0(@types/node@24.9.2)(jiti@2.6.1)(jsdom@27.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + specifier: 4.0.6 + version: 4.0.6(@types/node@24.9.2)(jiti@2.6.1)(jsdom@27.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) packages/angular/build: dependencies: @@ -447,8 +447,8 @@ importers: specifier: 7.8.2 version: 7.8.2 vitest: - specifier: 4.0.0 - version: 4.0.0(@types/node@24.9.2)(jiti@2.6.1)(jsdom@27.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + specifier: 4.0.6 + version: 4.0.6(@types/node@24.9.2)(jiti@2.6.1)(jsdom@27.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: lmdb: specifier: 3.4.3 @@ -3721,20 +3721,20 @@ packages: peerDependencies: vite: ^6.0.0 || ^7.0.0 - '@vitest/coverage-v8@4.0.0': - resolution: {integrity: sha512-VyVmZ8TccaGCZT9C0/vIi3kbPmvD/rLUcRx1AC8QzqaCm9SLYr1p3rxirW3EuwEGWnVU7KjGckAwJR1SRtgurA==} + '@vitest/coverage-v8@4.0.6': + resolution: {integrity: sha512-cv6pFXj9/Otk7q1Ocoj8k3BUVVwnFr3jqcqpwYrU5LkKClU9DpaMEdX+zptx/RyIJS+/VpoxMWmfISXchmVDPQ==} peerDependencies: - '@vitest/browser': 4.0.0 - vitest: 4.0.0 + '@vitest/browser': 4.0.6 + vitest: 4.0.6 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.0.0': - resolution: {integrity: sha512-NLwsOv2m6RfTEMk5AhpFIUVbd5BDmZnev5XxIIwJiNsXFOetFdqMzil/paGpwwbfQyaeQCokB1rQbKsnvLeR/w==} + '@vitest/expect@4.0.6': + resolution: {integrity: sha512-5j8UUlBVhOjhj4lR2Nt9sEV8b4WtbcYh8vnfhTNA2Kn5+smtevzjNq+xlBuVhnFGXiyPPNzGrOVvmyHWkS5QGg==} - '@vitest/mocker@4.0.0': - resolution: {integrity: sha512-s5S729mda0Umb60zbZeyYm58dpv97VNOXZ1bLSZ9AfaOE8TJoW4IDfEnw3IaCk9nq/Hug80hFmAz5NAh+XOImQ==} + '@vitest/mocker@4.0.6': + resolution: {integrity: sha512-3COEIew5HqdzBFEYN9+u0dT3i/NCwppLnO1HkjGfAP1Vs3vti1Hxm/MvcbC4DAn3Szo1M7M3otiAaT83jvqIjA==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0-0 @@ -3744,20 +3744,20 @@ packages: vite: optional: true - '@vitest/pretty-format@4.0.0': - resolution: {integrity: sha512-oUjxwO6VcUP0VtCkJERILS2yKV4AZiE1VTWDjvjeb8pXG6P5iubyeP+cmcj2vzCPdUst8vNhXMqC1CnxvDN97Q==} + '@vitest/pretty-format@4.0.6': + resolution: {integrity: sha512-4vptgNkLIA1W1Nn5X4x8rLJBzPiJwnPc+awKtfBE5hNMVsoAl/JCCPPzNrbf+L4NKgklsis5Yp2gYa+XAS442g==} - '@vitest/runner@4.0.0': - resolution: {integrity: sha512-w3kADT0nDmY4dQyfPtq7zEe6wbwDy88Go2b7NpWuj0iqA1H26CTS/JB2/t8tKbvxk7MTJ9vTsRK/VMVuKmLPaQ==} + '@vitest/runner@4.0.6': + resolution: {integrity: sha512-trPk5qpd7Jj+AiLZbV/e+KiiaGXZ8ECsRxtnPnCrJr9OW2mLB72Cb824IXgxVz/mVU3Aj4VebY+tDTPn++j1Og==} - '@vitest/snapshot@4.0.0': - resolution: {integrity: sha512-ELrK8qhbH3WdhD/2qh3NnR7xnaxOGx62NYLj5XKAGPIABOc+1ITN1XfH/MTgdP6Ov7O91DycuGrzwpizdCpuHg==} + '@vitest/snapshot@4.0.6': + resolution: {integrity: sha512-PaYLt7n2YzuvxhulDDu6c9EosiRuIE+FI2ECKs6yvHyhoga+2TBWI8dwBjs+IeuQaMtZTfioa9tj3uZb7nev1g==} - '@vitest/spy@4.0.0': - resolution: {integrity: sha512-VKD9p74W9ALFV2dSy3j8WtitY3gtloO+U6EZq84TY5gTaTTt1Lvs9nZnuaBomzEHYp/QbtGRMMKBOCsir2IAgA==} + '@vitest/spy@4.0.6': + resolution: {integrity: sha512-g9jTUYPV1LtRPRCQfhbMintW7BTQz1n6WXYQYRQ25qkyffA4bjVXjkROokZnv7t07OqfaFKw1lPzqKGk1hmNuQ==} - '@vitest/utils@4.0.0': - resolution: {integrity: sha512-8OXfn18Y7UtcpqhiQAfxcmZIsemPPKcg/guU2CLvafXn50G6B2EvKuj3A5h7ZMAvm95tDkll13rTtdd08MKjLQ==} + '@vitest/utils@4.0.6': + resolution: {integrity: sha512-bG43VS3iYKrMIZXBo+y8Pti0O7uNju3KvNn6DrQWhQQKcLavMB+0NZfO1/QBAEbq0MaQ3QjNsnnXlGQvsh0Z6A==} '@web/browser-logs@0.4.1': resolution: {integrity: sha512-ypmMG+72ERm+LvP+loj9A64MTXvWMXHUOu773cPO4L1SV/VWg6xA9Pv7vkvkXQX+ItJtCJt+KQ+U6ui2HhSFUw==} @@ -7483,7 +7483,6 @@ packages: engines: {node: '>=0.6.0', teleport: '>=0.2.0'} deprecated: |- You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. - (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) qjobs@1.2.0: @@ -8649,18 +8648,18 @@ packages: yaml: optional: true - vitest@4.0.0: - resolution: {integrity: sha512-Z+qKuTt2py+trSv2eJNYPaQKos88EmmLntXLAJkOHdd1v3BdcS4DgIkyC6cQPRoh8tWb+QiFfW08U347mjcV0g==} + vitest@4.0.6: + resolution: {integrity: sha512-gR7INfiVRwnEOkCk47faros/9McCZMp5LM+OMNWGLaDBSvJxIzwjgNFufkuePBNaesGRnLmNfW+ddbUJRZn0nQ==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.0 - '@vitest/browser-preview': 4.0.0 - '@vitest/browser-webdriverio': 4.0.0 - '@vitest/ui': 4.0.0 + '@vitest/browser-playwright': 4.0.6 + '@vitest/browser-preview': 4.0.6 + '@vitest/browser-webdriverio': 4.0.6 + '@vitest/ui': 4.0.6 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -12260,10 +12259,10 @@ snapshots: dependencies: vite: 7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - '@vitest/coverage-v8@4.0.0(vitest@4.0.0(@types/node@24.9.2)(jiti@2.6.1)(jsdom@27.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitest/coverage-v8@4.0.6(vitest@4.0.6(@types/node@24.9.2)(jiti@2.6.1)(jsdom@27.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.0 + '@vitest/utils': 4.0.6 ast-v8-to-istanbul: 0.3.8 debug: 4.4.3(supports-color@10.2.2) istanbul-lib-coverage: 3.2.2 @@ -12273,47 +12272,47 @@ snapshots: magicast: 0.3.5 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.0(@types/node@24.9.2)(jiti@2.6.1)(jsdom@27.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 4.0.6(@types/node@24.9.2)(jiti@2.6.1)(jsdom@27.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitest/expect@4.0.0': + '@vitest/expect@4.0.6': dependencies: '@standard-schema/spec': 1.0.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.0.0 - '@vitest/utils': 4.0.0 + '@vitest/spy': 4.0.6 + '@vitest/utils': 4.0.6 chai: 6.2.0 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.0(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitest/mocker@4.0.6(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: - '@vitest/spy': 4.0.0 + '@vitest/spy': 4.0.6 estree-walker: 3.0.3 magic-string: 0.30.19 optionalDependencies: vite: 7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - '@vitest/pretty-format@4.0.0': + '@vitest/pretty-format@4.0.6': dependencies: tinyrainbow: 3.0.3 - '@vitest/runner@4.0.0': + '@vitest/runner@4.0.6': dependencies: - '@vitest/utils': 4.0.0 + '@vitest/utils': 4.0.6 pathe: 2.0.3 - '@vitest/snapshot@4.0.0': + '@vitest/snapshot@4.0.6': dependencies: - '@vitest/pretty-format': 4.0.0 + '@vitest/pretty-format': 4.0.6 magic-string: 0.30.19 pathe: 2.0.3 - '@vitest/spy@4.0.0': {} + '@vitest/spy@4.0.6': {} - '@vitest/utils@4.0.0': + '@vitest/utils@4.0.6': dependencies: - '@vitest/pretty-format': 4.0.0 + '@vitest/pretty-format': 4.0.6 tinyrainbow: 3.0.3 '@web/browser-logs@0.4.1': @@ -18160,15 +18159,15 @@ snapshots: tsx: 4.20.6 yaml: 2.8.1 - vitest@4.0.0(@types/node@24.9.2)(jiti@2.6.1)(jsdom@27.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vitest@4.0.6(@types/node@24.9.2)(jiti@2.6.1)(jsdom@27.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: - '@vitest/expect': 4.0.0 - '@vitest/mocker': 4.0.0(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - '@vitest/pretty-format': 4.0.0 - '@vitest/runner': 4.0.0 - '@vitest/snapshot': 4.0.0 - '@vitest/spy': 4.0.0 - '@vitest/utils': 4.0.0 + '@vitest/expect': 4.0.6 + '@vitest/mocker': 4.0.6(vite@7.1.11(@types/node@24.9.2)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/pretty-format': 4.0.6 + '@vitest/runner': 4.0.6 + '@vitest/snapshot': 4.0.6 + '@vitest/spy': 4.0.6 + '@vitest/utils': 4.0.6 debug: 4.4.3(supports-color@10.2.2) es-module-lexer: 1.7.0 expect-type: 1.2.2 diff --git a/tests/legacy-cli/e2e/utils/vitest.ts b/tests/legacy-cli/e2e/utils/vitest.ts index a16d7fca3cee..3f312ff29c3e 100644 --- a/tests/legacy-cli/e2e/utils/vitest.ts +++ b/tests/legacy-cli/e2e/utils/vitest.ts @@ -3,7 +3,7 @@ import { updateJsonFile } from './project'; /** Updates the `test` builder in the current workspace to use Vitest. */ export async function applyVitestBuilder(): Promise { - await silentNpm('install', 'vitest@4.0.0', 'jsdom@27.0.0', '--save-dev'); + await silentNpm('install', 'vitest@4.0.6', 'jsdom@27.0.0', '--save-dev'); await updateJsonFile('angular.json', (json) => { const projects = Object.values(json['projects']);