将参数传递给jest函数

时间:2018-04-08 07:08:34

标签: javascript reactjs mocking jest

我的子组件中有这个功能:

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

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