ESLint extension: eslint-plugin-testing-library
https://github.com/testing-library/eslint-plugin-testing-library
Await async components updates
Flaky alert: await wait(100)
Useful functions:
await waitForElementToBeRemoved(() => screen.getByTestId('loading-spinner'))
await waitForNextUpdate()
await waitFor(() => expect(queryByText('All')).toBeNull())
await waitForValueToChange(() => result.current.comments)
Responding to the act
warning correctly
To prepare a component for assertions, wrap the code rendering it and performing updates inside an act() call. This makes your test run closer to how React works in the browser.
fireEvent
is already wrapped in act
inside, you get the warning because an update after fireEvent
is not awaited.
To fix act warning, make sure you properly handle asynchronous actions!
Resources
https://kentcdodds.com/blog/common-mistakes-with-react-testing-library
Learnings from applying eslint plugin for testing library - whys
Avoid destructuring queries from render
result, use screen.getByText
instead
Saves time and line
Forbidden usage of render
within testing framework beforeEach
setup
Move rendering as close to assertion as possible
Prefer using queryBy* when waiting for disappearance
More specific error message