From 4eb8393a282fd7efa657c8107ce11a71668ec82c Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Tue, 23 May 2023 16:00:26 +0200 Subject: [PATCH] fix: don't restore methods in automocked dependencies --- examples/mocks/test/automocking.spec.ts | 4 ++++ packages/vitest/src/runtime/mocker.ts | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/examples/mocks/test/automocking.spec.ts b/examples/mocks/test/automocking.spec.ts index b99029e0e3d3..1eea3c48fa86 100644 --- a/examples/mocks/test/automocking.spec.ts +++ b/examples/mocks/test/automocking.spec.ts @@ -48,6 +48,8 @@ test('automock properly restores mock', async () => { expect(moduleWithSymbol.warn()).toBeUndefined() expect(moduleWithSymbol[methodSymbol]()).toBeUndefined() + expect(log.warn).toHaveProperty('mockImplementation') + vi.restoreAllMocks() expect(() => { @@ -56,6 +58,8 @@ test('automock properly restores mock', async () => { expect(moduleWithSymbol[methodSymbol]()).toBe('hello') expect(moduleWithSymbol.warn()).toBe('hello') + + expect(log.warn).toHaveProperty('mockImplementation') }) test('automock has a getter', () => { diff --git a/packages/vitest/src/runtime/mocker.ts b/packages/vitest/src/runtime/mocker.ts index a3f617113b50..b765aedee11a 100644 --- a/packages/vitest/src/runtime/mocker.ts +++ b/packages/vitest/src/runtime/mocker.ts @@ -267,7 +267,12 @@ export class VitestMocker { continue if (isFunction) { - spyOn(newContainer, property).mockImplementation(() => undefined) + const mock = spyOn(newContainer, property).mockImplementation(() => undefined) + mock.mockRestore = () => { + mock.mockReset() + mock.mockImplementation(undefined!) + return mock + } // tinyspy retains length, but jest doesn't. Object.defineProperty(newContainer[property], 'length', { value: 0 }) }