我正在尝试用react测试库测试一个对话框。此对话框包含一个我用react hook表单呈现的表单。此表单有一个带有验证的字段。当组件呈现时,isValid
会从false再次翻转为true。这会导致react测试库检测到更改并抱怨act
时出现问题。
我创建了一个小沙盒来演示我的问题:https://codesandbox.io/s/intelligent-chaum-pmgozq?file=/src/App.tsx
在控制台中查看isValid
如何从false变为true再变为false。
现在,取下包装Dialog
,观察它按预期工作,粘贴在false。
然而,它似乎是Dialog和react钩子的组合,形成了isValid
的代理。如果我删除了对isValid
的所有引用,那么表单只呈现一次。
我不确定如何绕过这个问题,也不确定正确的方法是什么。我想测试整个对话框,就像KCD一直说的那样,测试尽可能接近用户体验,所以我认为提取表单并测试这不是一个好主意。同时,我甚至不知道如何利用waitFor
来解决这个问题。
我认为在这种情况下,编写代码的另一种方法会有所帮助。
我已经在一个名为MyForm
的新组件中提取了您的form
和与react-hook-form
相关的所有逻辑,然后在Dialog
组件中呈现了MyForm
。
现在我只能在控制台中看到1个log
。
以下是更改后的代码沙盒的链接:https://codesandbox.io/s/magical-frog-cjpi3h?file=/src/App.tsx