我已经制作了自己的自定义TextInput
组件,该组件带有nextField
道具。当按下我的TextInput
中的“完成”按钮时,应将nextField
对准焦点。很简单它在生产中起作用。
但是,我在测试聚焦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);
关于javascript - 在Jest不起作用的情况下监视链接方法调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51869381/