Description
@testing-library/react
version: 13.4.0- Testing Framework and version: jest@27.5.1
- DOM Environment: jsdom@16.7.0
- node: 16.14.2
- react: 18.2.0
Relevant code or config:
render(<App />);
await screen.findByText('Failed!');
//assertion fails unless we `waitFor` it
expect(mockLog).toHaveBeenCalledWith('kaboom!')
What you did:
Upgraded existing application to react 18+ and RTL 13+.
What happened:
A number of tests starting failing assertions after upgrading.
In this case, the component is rendered with a simulated fetch
failure. The component renders a child component that is responsible for error presentation and minor logging (in an effect hook). The test assertion on the logging function call fails unless it is awaited.
Reproduction:
I was able to reproduce the issue with a simple CRA repo, here: https://github.com/trv-wcaneira/fetch-err-waitfor-mcve
Problem description:
Pre-upgrade, it was sufficient to await
the error message text rendered by the child component. Now it seems additional waiting is needed, and before I plaster waitFor
s all over our tests 😄, I'd just like to understand why.
Suggested solution:
I could obviously change all the tests to waitFor
the logging function call, but would like to understand the change in behavior.