我有一个React组件,它使用Promise检索数据,然后在promise解析时调用setState。然后,它使用更新后的状态来更改呈现的内容。
在测试时,我使用testing library的findBy* 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 to this要么是关于使用useEffect的组件,要么是关于在其中包含对act的显式调用的测试(我的测试没有这个必要)-我的测试本身并没有改变组件,除了它调用了render这一事实。
简而言之,我的情况看起来比其他人写的要简单-我只是使用setState和findBy*查询,没有更复杂的东西。
对于这个问题,有没有同样简单的解决方案?
发布于 2019-12-13 00:30:56
谢天谢地,解决方案很简单--将React和React-DOM升级到>= 16.9.0。我不需要更改我的测试或组件。
16.9.0包括an asynchronous version of act。正如我所说的,我不需要显式地使用它,但它显然是在幕后使用的,因为它解决了我的问题。
https://stackoverflow.com/questions/59308987
复制相似问题