当前位置: 首页 > 知识库问答 >
问题:

用Jest和TypeScript中的可选参数模拟函数

俞涵涤
2023-03-14

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

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

请注意,回调是可选的。如果我用开玩笑。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)=

参数“callback”和“callback”的类型不兼容。

键入“((下载ID:编号)=

类型“未定义”不可分配给类型“(下载ID:编号)=

共有1个答案

袁鸿达
2023-03-14

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

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

mockDownload.mockImplementation((options, callback) => callback?.(0))
 类似资料:
  • 问题内容: 当想用Jest模拟外部模块时,我们可以使用该方法来自动模拟模块上的功能。 然后,我们可以根据需要在模拟模块上操纵和询问模拟函数。 例如,考虑以下模拟axios模块的人为示例: 上面的代码在Jest中可以正常运行,但会引发Typescript错误: 类型’(url:string,config ?: AxiosRequestConfig | undefined)=> AxiosPromis

  • 我想编写一个函数,它接受一个对象参数,在函数签名中使用解构,并且该参数是可选的: 但是,TypeScript不允许我(绑定模式参数在实现签名中不能是可选的。)。 如果我不破坏结构,我当然可以做到: 看起来这些应该是一样的,但是上面的例子是不允许的。 我想使用一个去结构化的语法(1)因为它存在,并且是一个很好的语法,并且上面的两个函数应该表现相同似乎是很自然的,并且(2)因为我还想要一个简洁的方法来

  • null 如上所示,它导出了一些命名函数,而且重要的是 使用了 。 开玩笑地说,当我为 编写单元测试时,我希望模拟 函数,因为我不希望 中的错误影响我为 编写的单元测试。我的问题是我不确定最好的方法是: 如有任何帮助/洞察力,我们将不胜感激。

  • 问题内容: 我的课如下: 在构造函数中的逻辑和是我试图嘲弄的事情。我想要任何调用:返回一个虚拟字符串。 我试过了: 但这似乎不起作用。仍在执行构造函数逻辑,而不是获取的模拟对象。 问题答案: 您发布的代码适用于最新版本的Mockito和Powermockito。也许您还没有准备A?试试这个: A.java MockA.java 两项测试均应通过Mockito 1.9.0,powermockito

  • 我想对我的服务进行单元测试。在我的服务中,我有一个构造函数,它是: ContractService.ts 我的模型看起来是这样的:(模型是来自sequelize-typescript的类) 所以我想用JEST创建我的单元测试。当我试图模仿contractModel时,它找不到方法,即使我试图模仿它。 我在想,怎样才是嘲弄这个合同模型的正确方法。

  • 在我的React项目中,我正在单元测试一个调用另一个异步函数的异步函数。 尽管每次测试时,结果都是一个空的promise{},而不是预期的数据。我在网上找到了很多模拟异步“getJobStatuses”函数结果的实现,但都没有成功(显示了我在这里使用的实现)。为了测试调用它的函数(getAllJobs),模拟该函数结果的正确方法是什么