Jest.js 如何等待user.click测试库React中的www.example.com()更新状态?

2skhul33  于 2023-03-06  发布在  Jest
关注(0)|答案(1)|浏览(160)

https://codesandbox.io/p/github/Lir-kulikov/users/main?file=%2Fsrc%2F__tests__%2FApp.test.js&selection=%5B%7B%22endColumn%22%3A22%2C%22endLineNumber%22%3A21%2C%22startColumn%22%3A22%2C%22startLineNumber%22%3A21%7D%5D
在src/tests/App.test.js的codesandbox中,由于在模拟点击(第21行)之后,在状态更新之前触发了screen.getByRole,因此小测试失败。为了确保您可以在第21行使用await取消对函数的注解,这将使一切正常工作。如何按照最佳实践正确修复它?
第二个问题:在所有的测试中,即使是通过ok的测试,我也会得到act的错误(你也可以在沙箱中看到)。当我试图将它 Package 到act()中时,eslint开始咒骂,无论如何也无济于事。我读了很多关于这个主题的文章,但仍然不明白哪里出了问题。

cbjzeqam

cbjzeqam1#

这似乎行得通:

import { waitFor } from '@testing-library/react'

// ...
await waitFor(async () => await user.keyboard("Joe@gmail.com"));

看到它工作here
但我还是觉得应该有更好的办法。
从技术上讲,user.keyboard不返回承诺,因此不需要async/await。但是当我删除它们时,收到Avoid using side effects within waitFor警告。1

1-不再适用于@testing-library/user-event@^14,已在react-testing-library/issues/1137中修复,请参见下面的@Lirrr注解。

相关问题