Description
@testing-library/react
version: 16.1.0- Testing Framework and version: jest 29.7.0
- DOM Environment: jsdom 29.7.0
Relevant code or config:
render(
<Suspense fallback="fallback">
<TestComponent />
</Suspense>
);
expect(screen.getByText("fallback")).toBeInTheDocument();
expect(await screen.findByText("resolved")).toBeInTheDocument();
What you did:
We're upgrading our codebase from React 18.3.1 to React 19.0.0.
What happened:
Over 300 tests started to fail because of suspended components kept rendering their fallbacks and never their children.
Reproduction:
In this repo we created a minimal reproduction for the issue we're facing.
It contains a folder react-18
and a folder react-19
that contains the same dependencies, configuration and code, except for the React version.
In both code bases there's the same test. It passes on the React 18 project, but fails in 2 different ways in the React 19 one.
Run npm test
in each folder to see the output.
Problem description:
By default, a test that uses Suspense gets stuck rendering the fallback on React 19.
RTL emits a warning to wrap the render method in an awaited act. Following the suggestion leads the component to un-suspend, but make it impossible to assert against its fallback.
Suggested solution:
We don't have a solution for this problem, but we think RTL should behave the same with React 18 and React 19.