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

向Jest函数传参:子组件handTotal调用测试报错排查

解决Jest测试中Cannot read property 'total' of undefined的问题

你遇到的问题根源非常清晰——你创建的handTotalStub这个Jest桩函数默认返回undefined,而子组件代码里直接尝试访问它返回值的.total属性,自然就会抛出这个错误啦。下面是具体的解决步骤:

1. 给桩函数设置符合预期的返回值

既然子组件期望handTotal('dealersHand')返回一个包含total属性的对象,那我们就得给桩函数配置对应的返回值:

固定返回值(适合简单测试场景)

在beforeEach或者具体测试用例中,用mockReturnValue指定返回结构:

handTotalStub.mockReturnValue({ total: 17 }); // 数值可以根据你的测试需求调整

根据参数动态返回(适合多场景测试)

如果需要根据传入的参数(比如'dealersHand')返回不同结果,可以用mockImplementation:

handTotalStub.mockImplementation((handType) => {
  switch(handType) {
    case 'dealersHand':
      return { total: 17 };
    // 可以添加其他handType的返回逻辑
    default:
      return { total: 0 };
  }
});

2. 确认桩函数已正确传递给子组件

检查你挂载组件的代码,确保handTotal这个prop已经正确传入:

wrapper = mount(<Dealer 
  dealersHand={dealersHandStub} 
  handTotal={handTotalStub} // 这里一定要确保传递了这个函数prop
  // 其他必要的props
/>);

很多时候漏传这个prop,会导致子组件中的handTotal本身就是undefined,调用时也会触发类似错误。

3. 可选:验证桩函数的调用逻辑

如果需要确认子组件是否正确调用了handTotal,可以在测试用例中添加断言:

expect(handTotalStub).toHaveBeenCalledWith('dealersHand');
expect(handTotalStub).toHaveBeenCalledTimes(1);

本质上,只要让你的桩函数返回符合子组件期望的结构(包含total属性的对象),而不是默认的undefined,这个错误就会消失啦。

内容的提问来源于stack exchange,提问作者The Walrus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:52:13