我的子组件中有此功能:

<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})

09-20 16:31