在Jest无法运作的情况下监视链接方法调用

时间:2018-08-16 03:55:55

标签: javascript reactjs react-native jestjs

我已经制作了自己的自定义TextInput组件,该组件带有一个nextField道具。当我的TextInput中的“完成”按钮被按下时,nextField应该被聚焦。很简单它可以在生产中使用。

但是,我在测试聚焦nextField的代码行时遇到了麻烦:

this.props.nextField && this.props.nextField().focus()

我正在使用此间谍对其进行测试:

const nextFieldSpy = jest.fn(() => {return {focus: jest.fn()}})

据我了解,当触发测试中的代码行时,我应该看到nextFieldSpynextFieldSpy().focus都被调用了。

但是,事实并非如此。这是开玩笑的期望:

expect(nextFieldSpy).toHaveBeenCalledTimes(1) expect(nextFieldSpy().focus).toHaveBeenCalledTimes(1)

这是我得到的错误-第一行通过,但第二行失败。

 Expected mock function to have been called one time, but it was called zero times.

  72 |     expect(nextFieldSpy).toHaveBeenCalledTimes(1)
> 73 |     expect(nextFieldSpy().focus).toHaveBeenCalledTimes(1)

这是怎么回事?

1 个答案:

答案 0 :(得分:2)

nextFieldSpy()每次被调用时都会返回一个新对象。

更改创建nextFieldSpy的方式以始终返回同一对象:

const nextFieldResult = {focus: jest.fn()};
const nextFieldSpy = jest.fn(() => nextFieldResult);