-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
@testing-library/react behaves differently when dealing with Suspense in React 18 and React 19 #1375
Comments
I am also experiencing a similar issue. Same test code worked in React 18, but broken after upgrading to React 19. Prerequisites
Steps to Reproduce
Workaround(This seems to not apply to all cases, but I am noting it just for reference) Beforeawait screen.findByRole('heading', { level: 1 }); Afterconst temp = globalThis.IS_REACT_ACT_ENVIRONMENT;
globalThis.IS_REACT_ACT_ENVIRONMENT = false;
const result = await vi.waitFor(() => {
screen.getByRole('heading', { level: 1 });
});
globalThis.IS_REACT_ACT_ENVIRONMENT = temp; |
That's the plan for January. Just need to find time. In the meantime, you can unblock yourselves by wrapping the updates that suspend in |
We have about 3'000 frontend tests - while "only" 10% are currently failing, I'm afraid we'll have to wait and see what happens next. I sill find it weird though that a "render" call on a component tree that starts being suspended seems to starve to death with the children never being rendered. |
Thanks @eps1lon for taking care of this. We're going to postpone the upgrade because we have around 300 tests failing because of this issue. The workaround would have to be reverted once the issue is fixed. |
@testing-library/react
version: 16.1.0Relevant code or config:
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 folderreact-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.
The text was updated successfully, but these errors were encountered: