Skip to content
GitHub

DeepMocked

type alias in meocord/testing Since 4.0.0

type DeepMocked<T, Depth extends number[] = []> = Depth['length'] extends 5
  ? T
  : {
      -readonly [K in keyof T]: T[K] extends (...args: any[]) => any
        ? MockedFunction<T[K]>
        : T[K] extends object
          ? DeepMocked<T[K], [...Depth, 0]>
          : Depth extends []
            ? NonNullable<T[K]> extends Base
              ? | DeepMocked<NonNullable<T[K]>, [...Depth, 0]>
                | Extract<T[K], null | undefined>
              : T[K]
            : T[K]
    } & T

A mock of T: every method a mock function, and every nested object mocked in turn, five levels deep, including a discord.js structure that may be absent, such as a message's member, when it is present.

It is what the mock factories return. It is assignable wherever T is expected, and each method takes mockResolvedValue and the rest of MockInstance.

See also