Skip to content

Commit 5d14b8e

Browse files
committed
Failing test for react#23331
1 parent 40eaa22 commit 5d14b8e

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

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

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,84 @@ describe('ReactDOMFizzServer', () => {
301301
);
302302
});
303303

304+
// @gate experimental
305+
it('should asynchronously load a lazy component with sibling after', async () => {
306+
const makeApp = () => {
307+
let resolve;
308+
const imports = new Promise(r => {
309+
resolve = () => r({default: () => <span id="async">async</span>});
310+
});
311+
const Lazy = React.lazy(() => imports);
312+
313+
// Test passes if you change:
314+
// <span id="after">after</span>
315+
// to:
316+
// <Suspense fallback={null}><span id="after">after</span></Suspense>
317+
const App = () => (
318+
<div>
319+
<Suspense fallback={<span>Loading...</span>}>
320+
<Lazy />
321+
<span id="after">after</span>
322+
</Suspense>
323+
</div>
324+
);
325+
326+
return [App, resolve];
327+
};
328+
329+
// Server-side
330+
const [App, resolve] = makeApp();
331+
await act(async () => {
332+
const {pipe} = ReactDOMFizzServer.renderToPipeableStream(<App />);
333+
pipe(writable);
334+
});
335+
expect(getVisibleChildren(container)).toEqual(
336+
<div>
337+
<span>Loading...</span>
338+
</div>,
339+
);
340+
await act(async () => {
341+
resolve();
342+
});
343+
expect(getVisibleChildren(container)).toEqual(
344+
<div>
345+
<span id="async">async</span>
346+
<span id="after">after</span>
347+
</div>,
348+
);
349+
350+
// Client-side
351+
const [HydrateApp, hydrateResolve] = makeApp();
352+
await act(async () => {
353+
ReactDOM.hydrateRoot(container, <HydrateApp />);
354+
// Throws after flushAll:
355+
// Warning: Prop `id` did not match. Server: "async" Client: "after"
356+
// at span
357+
// at Suspense
358+
// at div
359+
// at App
360+
Scheduler.unstable_flushAll();
361+
});
362+
363+
// nb: Honestly not really sure whether this should expect "loading..." or "async"
364+
expect(getVisibleChildren(container)).toEqual(
365+
<div>
366+
<span id="async">async</span>
367+
<span id="after">after</span>
368+
</div>,
369+
);
370+
371+
await act(async () => {
372+
hydrateResolve();
373+
});
374+
expect(getVisibleChildren(container)).toEqual(
375+
<div>
376+
<span id="async">async</span>
377+
<span id="after">after</span>
378+
</div>,
379+
);
380+
});
381+
304382
// @gate experimental
305383
it('should support nonce scripts', async () => {
306384
CSPnonce = 'R4nd0m';

0 commit comments

Comments
 (0)