我的子组件中有此功能:
<div> {handTotal('dealersHand').total} </div>
这已经从上面传下来了
但是当我开玩笑时说
Cannot read property 'total' of undefined
当我
console.log(handTotal('dealersHand')
记录正确的事情并且功能起作用时,所以我知道它在做正确的事情我像这样开玩笑地将其存根:
const handTotalStub = jest.fn()
beforeEach(() => {
wrapper = mount(<Dealer
dealersHand={dealersHandStub}
containsAce={containsAceStub}
handTotal={handTotalStub}
/>);
})
我如何将参数传递给此函数,以便使开玩笑了解它的含义?
如果没有意义,可以添加更多代码/解释
存根:
const handTotalStub = jest.fn().mockReturnValue('dealersHand')
测试:
it('expects dealers hand to equal', () => {
expect(handTotalStub('dealersHand').total).toEqual(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})