【发布时间】:2021-01-12 08:25:47
【问题描述】:
我创建了一个自定义 React Hook,用于在窗口调整大小时获取视口宽度和高度(事件被去抖动)。钩子工作正常,但我一直无法找到使用 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 大小,因为我认为这不包括 scollbar 宽度。
【问题讨论】:
-
除了测试失败之外,似乎没有发生您上面提到的错误?
-
是的,测试失败是我正在努力解决的问题。如果您单击测试失败,它会显示“无法在 'EventTarget' 上执行 'dispatchEvent':参数 1 不是 'Event' 类型。” - 啊,等一下,刷新页面,现在错误消失了 - 但是测试仍然失败。
-
不,我看不到这样的东西。这是我看到的loom.com/share/840989b580d7416c8265736e2c92e0fe
-
感谢@tmhao2005 的视频 - 是的,这可能是codeandbox 的一个奇怪问题。但主要是我正在寻找如何测试这个钩子的帮助(我已经更新了上面的问题)。
-
我给你一个建议作为答案。检查我的内联评论以确保您正确跟进
标签: reactjs react-testing-library