在使用setState的组件上使用测试库findBy *会导致“未包装”行为警告

时间:2019-12-12 16:30:55

标签: reactjs react-hooks react-testing-library

我有一个React组件,该组件使用Promise检索数据,然后在Promise解析后调用setState。然后,它使用更新后的状态来更改呈现的内容。

在对此进行测试时,我使用testing libraryfindBy* methods等待渲染的组件已被Promise中的内容更新:

await findByText("Failure details", { exact: false });

我的测试通过-他们正确地等待,直到重新渲染组件。但是,运行它们时会收到这样的警告(我正在使用Jest,但我认为这并不重要):

Warning: An update to MyComponent inside a test was not wrapped in act(...).

Everything I've found online that's related,这与使用useEffect的组件或包含在其中显式调用act(不需要),我认为这里没有必要-除了调用render的事实外,我的测试本身并未更改组件

简而言之,我的情况似乎比其他人写的要简单-我只使用setStatefindBy*查询,没有什么比这更复杂了。

是否有同样简单的解决方案?

1 个答案:

答案 0 :(得分:0)

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

16.9.0包含an asynchronous version of act。正如我所说,我不必显式使用它,但是显然它在后台使用,因为它解决了我的问题。