在Jest和TypeScript中模拟具有可选参数的函数

问题描述 投票:0回答:1

我正在用TypeScript编写Jest测试,我想为这样的函数创建一个强类型的模拟:

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,回调:(downloadId:number)=> void)=> void'的参数不能分配给类型'((options:DownloadOptions,callback ?:((downloadId:number)=> void)| undefined)=> void'。

参数类型'回调'和'回调'不兼容。

Type'(((downloadId:number)=> void)|未定义”无法分配给类型((downloadId:number)=> void'。

类型'undefined'不能分配给类型'(downloadId:number)=> void'。

typescript jest
1个回答
0
投票

使用jest.MockedFunction,从模拟实现函数中删除类型,并可选地调用回调。

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

mockDownload.mockImplementation((options, callback) => callback?.(0))
© www.soinside.com 2019 - 2024. All rights reserved.