我正在用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'。
使用jest.MockedFunction
,从模拟实现函数中删除类型,并可选地调用回调。
const mockDownload = jest.fn() as jest.MockedFunction<typeof download>
mockDownload.mockImplementation((options, callback) => callback?.(0))