Reactjs 在使用setState的组件上使用测试库findBy*会导致;不受法案约束”;警告

Reactjs 在使用setState的组件上使用测试库findBy*会导致;不受法案约束”;警告,reactjs,react-hooks,react-testing-library,Reactjs,React Hooks,React Testing Library,我有一个React组件,它使用承诺检索数据,然后在承诺解析时调用setState。然后,它使用更新的状态来更改渲染的内容 在测试时,我使用的等待呈现的组件使用Promise中的内容进行更新: await findByText("Failure details", { exact: false }); 我的测试通过-它们正确地等待组件重新呈现。但是,在运行它们时,我会收到这样的警告(我使用的是玩笑,但我认为这与此无关): 这要么是关于使用useffect的组件,要么是关于其中包含显式调用act的

我有一个React组件,它使用承诺检索数据,然后在承诺解析时调用
setState
。然后,它使用更新的状态来更改渲染的内容

在测试时,我使用的等待呈现的组件使用Promise中的内容进行更新:

await findByText("Failure details", { exact: false });
我的测试通过-它们正确地等待组件重新呈现。但是,在运行它们时,我会收到这样的警告(我使用的是玩笑,但我认为这与此无关):

这要么是关于使用
useffect
的组件,要么是关于其中包含显式调用
act
的测试(我的没有),我认为这在这里不必要-我的测试本身没有改变组件,除了调用
render
之外

简言之,我的情况似乎比其他人所写的要简单——我只是使用
setState
findBy*
查询,没有比这更复杂的了


这个问题有没有同样简单的解决方案?

谢天谢地,解决方案很简单-将React和React DOM升级到>=16.9.0。我不必更改我的测试或组件


16.9.0包括。正如我所说,我不必显式地使用它,但它显然是在幕后使用的,因为它解决了我的问题。

谢天谢地,解决方案很简单——将React和React DOM升级到>=16.9.0。我不必更改我的测试或组件


16.9.0包括。正如我所说,我不必显式地使用它,但它显然是在幕后使用的,因为它解决了我的问题。

在按照此处所述修复此问题之后,实际上,我最终将调用
setState
的组件代码包装在
useffect
钩子中,这样我就可以在未安装的组件上执行而不尝试设置状态。但这并不要求我对act警告做任何进一步的处理,上面的内容仍然足够。在按照这里所述解决了这个问题之后,我实际上最终将调用
setState
的组件代码包装在
useffect
钩子中,这样我就可以在未安装的组件上执行操作,而不是尝试设置状态。但这并不要求我对act警告做进一步的修改,上面的内容仍然足够。
Warning: An update to MyComponent inside a test was not wrapped in act(...).