Javascript 在Jest不工作的情况下监视链式方法调用

Javascript 在Jest不工作的情况下监视链式方法调用,javascript,reactjs,react-native,jestjs,Javascript,Reactjs,React Native,Jestjs,我已经制作了自己的自定义TextInput组件,该组件采用nextFieldprop。按下myTextInput中的“完成”按钮时,应聚焦下一个字段。很简单。它在生产中起作用 但是,我在测试专注于nextField的代码行时遇到了问题: this.props.nextField&&this.props.nextField().focus() 我正在用这个间谍测试它: const nextFieldSpy=jest.fn(()=>{return{focus:jest.fn()}}) 我的理解是,当

我已经制作了自己的自定义
TextInput
组件,该组件采用
nextField
prop。按下my
TextInput
中的“完成”按钮时,应聚焦下一个字段。很简单。它在生产中起作用

但是,我在测试专注于
nextField
的代码行时遇到了问题:

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

我正在用这个间谍测试它:

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

我的理解是,当被测代码行被触发时,我应该看到
nextFieldSpy
nextFieldSpy().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)
发生了什么事?

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

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

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