簡體   English   中英

在 Jest 和 TypeScript 中使用可選參數模擬函數

[英]Mocking a function with optional parameters in Jest and TypeScript

我正在用 TypeScript 編寫 Jest 測試,我想為這樣的函數創建一個強類型模擬:

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

請注意,回調是可選的。 如果我使用jest.Mock來投射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) 類型的參數| 未定義) => 無效'。

參數“回調”和“回調”的類型不兼容。

輸入 '((downloadId: number) => void) | undefined' 不能分配給類型 '(downloadId: number) => void'。

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

使用jest.MockedFunction ,從模擬實現函數中刪除類型並可選擇調用回調。

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

mockDownload.mockImplementation((options, callback) => callback?.(0))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM