From 9fa4be9d094fd79ccd56f0328d41aca637c57c14 Mon Sep 17 00:00:00 2001 From: hawkgs Date: Mon, 27 Apr 2026 15:30:03 +0300 Subject: [PATCH] test(zone.js): vitest patch for testing (#68395) Test `fakeAsync` API in Vitest when Zone.js `vitest` patch applied. PR Close #68395 --- .github/workflows/ci.yml | 1 + .github/workflows/pr.yml | 1 + packages/zone.js/package.json | 3 +- .../test/vitest/vitest-patch-globals.spec.js | 58 +++++++++++++++++++ ...vitest.spec.js => with-proxy-zone.spec.js} | 0 5 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 packages/zone.js/test/vitest/vitest-patch-globals.spec.js rename packages/zone.js/test/vitest/{vitest.spec.js => with-proxy-zone.spec.js} (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b92a726efc6..7dbb5d312c9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -188,6 +188,7 @@ jobs: - run: pnpm -C packages/zone.js jest:test - run: pnpm -C packages/zone.js jest:nodetest - run: pnpm -C packages/zone.js vitest:test + - run: pnpm -C packages/zone.js vitest-globals:test - run: pnpm -C packages/zone.js electrontest - run: pnpm -C packages/zone.js/test/typings test diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 9c71d9b67e3..31e23623f26 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -174,5 +174,6 @@ jobs: - run: pnpm -C packages/zone.js jest:test - run: pnpm -C packages/zone.js jest:nodetest - run: pnpm -C packages/zone.js vitest:test + - run: pnpm -C packages/zone.js vitest-globals:test - run: pnpm -C packages/zone.js electrontest - run: pnpm -C packages/zone.js/test/typings test diff --git a/packages/zone.js/package.json b/packages/zone.js/package.json index eb729d3b69a..f46248249ba 100644 --- a/packages/zone.js/package.json +++ b/packages/zone.js/package.json @@ -35,7 +35,8 @@ "electrontest": "cd test/extra && node electron.js", "jest:test": "jest --config ./test/jest/jest.config.js", "jest:nodetest": "jest --config ./test/jest/jest.node.config.js", - "vitest:test": "vitest ./test/vitest/vitest.spec.js", + "vitest:test": "vitest ./test/vitest/*.spec.js --exclude ./test/vitest/*-globals.spec.js", + "vitest-globals:test": "vitest ./test/vitest/*-globals.spec.js --globals", "promisefinallytest": "mocha ./test/promise/promise.finally.spec.mjs", "release": "node tools/release.mts" }, diff --git a/packages/zone.js/test/vitest/vitest-patch-globals.spec.js b/packages/zone.js/test/vitest/vitest-patch-globals.spec.js new file mode 100644 index 00000000000..fcf95c93c92 --- /dev/null +++ b/packages/zone.js/test/vitest/vitest-patch-globals.spec.js @@ -0,0 +1,58 @@ +require('../../../../dist/bin/packages/zone.js/npm_package/bundles/zone.umd.js'); +require('../../../../dist/bin/packages/zone.js/npm_package/bundles/zone-testing.umd.js'); + +// Apply the Vitest patch (i.e. `patchVitest`). +require('../../../../dist/bin/packages/zone.js/npm_package/bundles/vitest-patch.umd.js'); + +const {fakeAsync, tick} = Zone[Zone.__symbol__('fakeAsyncTest')]; + +describe('patchVitest `describe`', () => { + test('verify that the patch is installed', () => { + expect(globalThis['vitest']['__zone_patch__']).toBe(true); + }); + + // Expect `beforeEach` to be patched and working with `fakeAsync`. + beforeEach(fakeAsync(() => { + expect(createAsyncTesterFlag()).toBe(true); + })); + + // Expect `afterEach` to be patched and working with `fakeAsync`. + afterEach(fakeAsync(() => { + expect(createAsyncTesterFlag()).toBe(true); + })); + + // Expect `beforeAll` to be patched and working with `fakeAsync`. + beforeAll(fakeAsync(() => { + expect(createAsyncTesterFlag()).toBe(true); + })); + + // Expect `afterAll` to be patched and working with `fakeAsync`. + afterAll(fakeAsync(() => { + expect(createAsyncTesterFlag()).toBe(true); + })); + + it('expect `it` to be patched and working with `fakeAsync`', fakeAsync(() => { + expect(createAsyncTesterFlag()).toBe(true); + })); + + test('expect `it` to be patched and working with `fakeAsync`', fakeAsync(() => { + expect(createAsyncTesterFlag()).toBe(true); + })); +}); + +suite('patchVitest `suite`', () => { + it('should work with a patched `suite`', fakeAsync(() => { + expect(createAsyncTesterFlag()).toBe(true); + })); +}); + +function createAsyncTesterFlag() { + let flag = false; + setTimeout(() => { + flag = true; + }, 100); + + tick(110); + + return flag; +} diff --git a/packages/zone.js/test/vitest/vitest.spec.js b/packages/zone.js/test/vitest/with-proxy-zone.spec.js similarity index 100% rename from packages/zone.js/test/vitest/vitest.spec.js rename to packages/zone.js/test/vitest/with-proxy-zone.spec.js