向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
相关产品推荐
相关产品推荐

