在Jest和TypeScript中使用可选参数模拟函数
我正在用TypeScript编写Jest测试,我想为如下函数创建一个强类型模拟:在Jest和TypeScript中使用可选参数模拟函数,typescript,jestjs,Typescript,Jestjs,我正在用TypeScript编写Jest测试,我想为如下函数创建一个强类型模拟: function download( options: DownloadOptions, callback?: (downloadId: number) => void ): void; download.mockImplementation( ( options: DownloadOptions, callback: (downloadId: number) => voi
function download(
options: DownloadOptions,
callback?: (downloadId: number) => void
): void;
download.mockImplementation(
(
options: DownloadOptions,
callback: (downloadId: number) => void,
) => callback(0),
)
请注意,回调是可选的。如果我使用jest.Mock
来强制转换模拟函数
const mockDownload = jest.fn() as jest.Mock<void, [
DownloadOptions,
((downloadId: number) => void)?
]>
。。。我得到TS错误2345:
类型为“(options:DownloadOptions,callback:(downloadId:number)=>void)=>void”的参数不能分配给类型为“(options:DownloadOptions,callback?:((downloadId:number)=>void)|未定义)=>void”的参数
参数“callback”和“callback”的类型不兼容
类型“((下载ID:number)=>void)|未定义”不可分配给类型“(下载ID:number)=>void”
类型“未定义”不可分配给类型“(downloadId:number)=>void”
使用
jest.MockedFunction
,从mock实现函数中删除类型,并可选地调用回调
const mockDownload=jest.fn()作为jest.MockedFunction
mockDownload.mockImplementation((选项,回调)=>callback?(0))
我在键入此问题时找到了答案,但希望其他人能从中受益。