Насмешка над функцией с необязательными параметрами в Jest и TypeScript - PullRequest
0 голосов
/ 21 февраля 2020

Я пишу свои Jest-тесты на TypeScript, и я хотел бы создать строго типизированный макет для такой функции:

function download(
  options: DownloadOptions,
  callback?: (downloadId: number) => void
): void;

Обратите внимание, что обратный вызов не является обязательным. Если я использую jest.Mock для приведения смоделированной функции ...

const mockDownload = jest.fn() as jest.Mock<void, [
  DownloadOptions,
  ((downloadId: number) => void)?
]>

... и пытаюсь использовать ее следующим образом:

download.mockImplementation(
  (
    options: DownloadOptions,
    callback: (downloadId: number) => void,
  ) => callback(0),
)

... Я получаю ошибку TS 2345:

Аргумент типа '(параметры: DownloadOptions, callback: (downloadId: number) => void) => void' нельзя назначить параметру типа '(параметры: DownloadOptions, callback? : ((downloadId: number) => void) | undefined) => void '.

Типы параметров' callback 'и' callback 'несовместимы.

Type' ((downloadId: номер) => пустота) | undefined 'нельзя назначить типу' (downloadId: number) => void '.

Тип' undefined 'нельзя назначить типу' (downloadId: number) => void '.

1 Ответ

0 голосов
/ 21 февраля 2020

Используйте jest.MockedFunction, удалите типы из фиктивной функции реализации и при необходимости вызовите обратный вызов.

const mockDownload = jest.fn() as jest.MockedFunction<typeof download>

mockDownload.mockImplementation((options, callback) => callback?.(0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...