Skip to content

Commit 27bcc64

Browse files
committed
Failing test case for deeply nested Suspense in Fallback
When a deep Suspense boundary is partially complete before a parent boundary resolves it can trigger a scenario that React thinks is a bug. This change implements a test case demonstrating this bug. It does not solve it
1 parent dddcae7 commit 27bcc64

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10447,4 +10447,52 @@ describe('ReactDOMFizzServer', () => {
1044710447
</html>,
1044810448
);
1044910449
});
10450+
10451+
it('should not error when discarding deeply nested Suspense boundaries in a parent fallback partially complete before the parent boundary resolves', async () => {
10452+
let resolve1;
10453+
const promise1 = new Promise(r => (resolve1 = r));
10454+
let resolve2;
10455+
const promise2 = new Promise(r => (resolve2 = r));
10456+
const promise3 = new Promise(r => {});
10457+
10458+
function Use({children, promise}) {
10459+
React.use(promise);
10460+
return children;
10461+
}
10462+
function App2() {
10463+
return (
10464+
<div>
10465+
<Suspense
10466+
fallback={
10467+
<Suspense fallback="Loading...">
10468+
<Use promise={promise1}>
10469+
<Suspense fallback="Loading more...">
10470+
<Use promise={promise3}>
10471+
<div>deep fallback</div>
10472+
</Use>
10473+
</Suspense>
10474+
</Use>
10475+
</Suspense>
10476+
}>
10477+
<Use promise={promise2}>Success!</Use>
10478+
</Suspense>
10479+
</div>
10480+
);
10481+
}
10482+
10483+
writable.on('data', console.log);
10484+
await act(() => {
10485+
const {pipe} = renderToPipeableStream(<App2 />);
10486+
pipe(writable);
10487+
});
10488+
10489+
expect(getVisibleChildren(container)).toEqual(<div>Loading...</div>);
10490+
10491+
await act(() => {
10492+
resolve1('resolved');
10493+
resolve2('resolved');
10494+
});
10495+
10496+
expect(getVisibleChildren(container)).toEqual(<div>Success!</div>);
10497+
});
1045010498
});

0 commit comments

Comments
 (0)