我已经制作了自己的自定义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)
这是怎么回事?
答案 0 :(得分:2)
nextFieldSpy()
每次被调用时都会返回一个新对象。
更改创建nextFieldSpy
的方式以始终返回同一对象:
const nextFieldResult = {focus: jest.fn()};
const nextFieldSpy = jest.fn(() => nextFieldResult);