我已经制作了自己的自定义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)


这是怎么回事?

最佳答案

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

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

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

关于javascript - 在Jest不起作用的情况下监视链接方法调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51869381/

10-12 13:45