You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jest测试中toHaveBeenCalledWith因意外空对象参数失败排查

问题原因

你看到的“两个调用参数”是React函数组件的调用特性——函数组件在被渲染时,会被传入两个参数:

  • 第一个是组件接收的props对象
  • 第二个是组件的children内容(即使children为空,也会传入undefined或空数组)

你的测试里toHaveBeenCalledWith默认会校验所有传入的参数,但你只写了第一个参数的匹配规则,jest会认为第二个参数不匹配,导致测试失败。而toHaveBeenCalledTimes(1)是对的,因为Grid确实只渲染了一次,只是这次调用传了两个参数。

解决方法

有两种简单的修复方式:

方式一:忽略第二个参数(推荐)

用expect.anything()匹配第二个参数,这样我们只关注props是否正确,不管children是什么:

expect(mockedGrid).toHaveBeenCalledWith(
  expect.objectContaining({
    templateColumns: 'repeat(2, 1fr)',
  }),
  expect.anything()
);

方式二:精确匹配第二个参数

如果你的测试场景需要明确校验children(比如这次tiles是空数组,children为空),可以直接传入空数组匹配:

expect(mockedGrid).toHaveBeenCalledWith(
  expect.objectContaining({
    templateColumns: 'repeat(2, 1fr)',
  }),
  []
);

另外,如果你需要更灵活地校验调用参数,也可以用expect.arrayContaining或者其他jest匹配器来适配不同的children场景。

内容的提问来源于stack exchange,提问作者Leonardo Teixeira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 16:15:29