我的子组件中有这个功能:
<div> {handTotal('dealersHand').total} </div>
这是从上面传下来的
然而,当我运行jest时,它会显示Cannot read property 'total' of undefined
当我console.log(handTotal('dealersHand')
它正在记录正确的东西并且该功能正常工作,所以我知道它正在做正确的事情
我像这样开玩笑地说:
const handTotalStub = jest.fn()
beforeEach(() => {
wrapper = mount(<Dealer
dealersHand={dealersHandStub}
containsAce={containsAceStub}
handTotal={handTotalStub}
/>);
})
如何将参数传递给此函数,以便jest了解它是什么?
如果没有意义,可以添加更多代码/解释
磕碰:
const handTotalStub = jest.fn().mockReturnValue('dealersHand')
试验:
it('expects dealers hand to equal', () => {
expect(handTotalStub('dealersHand').total).toEqual(1);
});
答案 0 :(得分:1)
handleTotalStub
的间谍间谍不返回任何内容,因此返回undefined
。当您的组件尝试拨打handTotal('dealersHand').total
时,系统会调用undefined.total
,因为未定义handTotal(...)
。
通过更改
更新您的间谍以返回某些内容(任何内容)handTotalStub = jest.fn();
到
handTotalStub = jest.fn().mockReturnValue(SOME_VALUE);
或
handTotalStub = jest.fn().mockImplementation(() => SOME_VALUE);
(其中SOME_VALUE是你可以模拟出来的任何值,作为组件期望的那个)
编辑 -
好的,所以你误解了mockReturnValue的作用。您不必模拟传递给该方法的参数。因为您的组件已经传入该字符串。但是,实际的handTotal
方法永远不会被调用(这是一件好事,因为我们没有测试handTotal
如何工作,我们正在测试组件的工作方式)
因此,无论handTotal
通常会返回什么,都是您想要放入mockReturnValue()
的内容。因此,如果handTotal
返回{total: 1}
之类的对象,那么您会说mockReturnValue({total: 1})