【问题标题】:Mocking a function with optional parameters in Jest and TypeScript在 Jest 和 TypeScript 中模拟带有可选参数的函数
【发布时间】:2020-06-06 01:14:43
【问题描述】:

我正在用 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:

'(options: DownloadOptions, callback: (downloadId: number) => void) => void' 类型的参数不可分配给 '(options: DownloadOptions, callback?: ((downloadId: number) = > void) | undefined) => void'。

“回调”和“回调”参数类型不兼容。

输入 '((downloadId: number) => void) | undefined' 不可分配给类型 '(downloadId: number) => void'。

类型“未定义”不可分配给类型“(downloadId: number) => void”。

【问题讨论】:

    标签: typescript jestjs


    【解决方案1】:

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

    const mockDownload = jest.fn() as jest.MockedFunction<typeof download>
    
    mockDownload.mockImplementation((options, callback) => callback?.(0))
    

    【讨论】:

    • 我在输入这个问题时找到了答案,但希望其他人能从中受益。
    猜你喜欢
    • 1970-01-01
    • 2012-09-27
    • 2021-04-05
    • 2023-01-09
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多