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。按下myTextInput
中的“完成”按钮时,应聚焦下一个字段。很简单。它在生产中起作用
但是,我在测试专注于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);