我已经创建了一个自定义的React Hook,用于在窗口调整大小时获取视口宽度和高度(事件被防抖处理)。这个Hook运行良好,但我一直无法找到一种使用React Testing Library进行测试的方法(我一直遇到错误)。
我已经在CodeSandbox中重新创建了应用程序(包括测试),以尝试调试,但是在测试过程中遇到了不同的错误。
有时我会得到:
这可能是我在使用React测试库时遗漏的东西。非常感谢任何帮助解决问题的支持!
演示应用程序/测试在这里:
似乎在应用程序中获取
我选择
我已经在CodeSandbox中重新创建了应用程序(包括测试),以尝试调试,但是在测试过程中遇到了不同的错误。
有时我会得到:
Failed to execute 'dispatchEvent' on 'EventTarget': parameter 1 is not of type 'Event'.`
但通常失败的原因是挂钩返回的数据似乎没有被返回。
expect(received).toBe(expected) // Object.is equality
Expected: 500
Received: undefined
这可能是我在使用React测试库时遗漏的东西。非常感谢任何帮助解决问题的支持!
演示应用程序/测试在这里:
https://codesandbox.io/s/useviewportsize-4l7gb?file=/src/use-viewport-size.test.tsx
===========
解决方案
感谢 @tmhao2005,问题似乎是由于挂钩从 document
而不是 window
获取调整大小的值导致的:
setViewportSize({
width: window.innerWidth, //document.documentElement.clientWidth - doesn't work
height: window.innerHeight //document.documentElement.clientHeight - doesn't work
});
似乎在应用程序中获取
clientWidth/Height
是可以的,但在React测试库测试中失败了。我选择
client
大小,因为我相信它不包括滚动条宽度。