From 773cbd78c7b18480b1328de1251af0b3db4d0923 Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Mon, 20 Jun 2022 08:05:11 +0300 Subject: [PATCH 1/2] fix: return types for vi.mocked are now equal to MaybeMocked --- packages/vitest/src/integrations/spy.ts | 10 ++-------- test/core/test/vi.spec.ts | 12 +++++++++++- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/vitest/src/integrations/spy.ts b/packages/vitest/src/integrations/spy.ts index 076d70e649bb..99191f66c230 100644 --- a/packages/vitest/src/integrations/spy.ts +++ b/packages/vitest/src/integrations/spy.ts @@ -67,10 +67,10 @@ export type MaybeMockedConstructor = T extends new ( ) => infer R ? SpyInstanceFn, R> : T -export type MockedFunction = MockWithArgs & { +export type MockedFunction = SpyInstanceFn, ReturnType> & { [K in keyof T]: T[K]; } -export type MockedFunctionDeep = MockWithArgs & MockedObjectDeep +export type MockedFunctionDeep = SpyInstanceFn, ReturnType> & MockedObjectDeep export type MockedObject = MaybeMockedConstructor & { [K in Methods]: T[K] extends Procedure ? MockedFunction @@ -96,12 +96,6 @@ export type MaybeMocked = T extends Procedure export type EnhancedSpy = SpyInstance & SpyImpl -export interface MockWithArgs - extends SpyInstanceFn, ReturnType> { - new (...args: T extends new (...args: any) => any ? ConstructorParameters : never): T - (...args: Parameters): ReturnType -} - export const spies = new Set() export function isMockFunction(fn: any): fn is EnhancedSpy { diff --git a/test/core/test/vi.spec.ts b/test/core/test/vi.spec.ts index ddd84545b166..f2fae11a0bc9 100644 --- a/test/core/test/vi.spec.ts +++ b/test/core/test/vi.spec.ts @@ -2,8 +2,11 @@ * @vitest-environment jsdom */ +import type { MockedFunction, MockedObject } from 'vitest' import { describe, expect, test, vi } from 'vitest' +const expectType = (obj: T) => obj + describe('testing vi utils', () => { test('global scope has variable', () => { const IntersectionObserverMock = vi.fn() @@ -29,7 +32,14 @@ describe('testing vi utils', () => { expect(v1).toBe(v2) }) - // TODO: it's unstable in CI, skip until resolved + test('vi mocked', () => { + expectType boolean }>>({ + bar: vi.fn(() => true), + }) + expectType boolean>>(vi.fn(() => true)) + expectType boolean>>(vi.fn()) + }) + test.skip('loads unloaded module', async () => { let mod: any import('../src/timeout').then(m => mod = m) From 24e950cef892a56cf110ca47fc52272d7781a9bf Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Mon, 20 Jun 2022 08:05:49 +0300 Subject: [PATCH 2/2] chore: cleanup --- test/core/test/vi.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/test/core/test/vi.spec.ts b/test/core/test/vi.spec.ts index f2fae11a0bc9..63e03e540aa1 100644 --- a/test/core/test/vi.spec.ts +++ b/test/core/test/vi.spec.ts @@ -40,6 +40,7 @@ describe('testing vi utils', () => { expectType boolean>>(vi.fn()) }) + // TODO: it's unstable in CI, skip until resolved test.skip('loads unloaded module', async () => { let mod: any import('../src/timeout').then(m => mod = m)