From a17efb18a3438003ac326ff985373c95f9fe5043 Mon Sep 17 00:00:00 2001 From: cyly <786156072@qq.com> Date: Thu, 1 Sep 2022 10:34:20 +0800 Subject: [PATCH 1/3] fix: delete mock in moduleCache when unmock --- packages/vitest/src/runtime/mocker.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/vitest/src/runtime/mocker.ts b/packages/vitest/src/runtime/mocker.ts index acecf9eeffa0..d14183ba119c 100644 --- a/packages/vitest/src/runtime/mocker.ts +++ b/packages/vitest/src/runtime/mocker.ts @@ -280,6 +280,10 @@ export class VitestMocker { const mock = this.mockMap.get(suitefile) if (mock?.[id]) delete mock[id] + + const mockId = this.getMockPath(id) + if (this.moduleCache.get(mockId)) + this.moduleCache.delete(mockId) } public mockPath(path: string, external: string | null, factory?: () => any) { From 695151a7941eda7096d98880c36b79cb3d46c7a2 Mon Sep 17 00:00:00 2001 From: cyly <786156072@qq.com> Date: Thu, 1 Sep 2022 10:56:10 +0800 Subject: [PATCH 2/3] chore: add test --- test/core/test/unmock-import.test.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 test/core/test/unmock-import.test.ts diff --git a/test/core/test/unmock-import.test.ts b/test/core/test/unmock-import.test.ts new file mode 100644 index 000000000000..6287bd395ec3 --- /dev/null +++ b/test/core/test/unmock-import.test.ts @@ -0,0 +1,26 @@ +import { afterEach, beforeEach, expect, test, vi } from 'vitest' + +// https://github.com/vitest-dev/vitest/issues/1940 +beforeEach(() => { + vi.doMock('/data', () => ({ + data: { + state: 'STARTED', + }, + })) +}) +afterEach(() => { + vi.doUnmock('/data') +}) + +test('first import', async () => { + // @ts-expect-error I know this + const { data } = await import('/data') + data.state = 'STOPPED' + expect(data.state).toBe('STOPPED') +}) + +test('secnod import should had been re-mock', async () => { + // @ts-expect-error I know this + const { data } = await import('/data') + expect(data.state).toBe('STARTED') +}) From 107b570ccf5f9b8bace1a4c984db339353425d7f Mon Sep 17 00:00:00 2001 From: cyly <786156072@qq.com> Date: Thu, 1 Sep 2022 10:56:56 +0800 Subject: [PATCH 3/3] chore: typo --- test/core/test/unmock-import.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/core/test/unmock-import.test.ts b/test/core/test/unmock-import.test.ts index 6287bd395ec3..c969ccec147f 100644 --- a/test/core/test/unmock-import.test.ts +++ b/test/core/test/unmock-import.test.ts @@ -19,7 +19,7 @@ test('first import', async () => { expect(data.state).toBe('STOPPED') }) -test('secnod import should had been re-mock', async () => { +test('second import should had been re-mock', async () => { // @ts-expect-error I know this const { data } = await import('/data') expect(data.state).toBe('STARTED')