Skip to content

Commit cd20701

Browse files
committed
Test
1 parent 27fbed5 commit cd20701

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

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

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1758,4 +1758,90 @@ describe('ReactDOMFizzStaticBrowser', () => {
17581758
await readIntoContainer(dynamic);
17591759
expect(getVisibleChildren(container)).toEqual('hello');
17601760
});
1761+
1762+
// @gate enableHalt
1763+
it('can resume render of a prerender', async () => {
1764+
const errors = [];
1765+
1766+
let resolveA;
1767+
const promiseA = new Promise(r => (resolveA = r));
1768+
let resolveB;
1769+
const promiseB = new Promise(r => (resolveB = r));
1770+
1771+
async function ComponentA() {
1772+
await promiseA;
1773+
return (
1774+
<Suspense fallback="Loading B">
1775+
<ComponentB />
1776+
</Suspense>
1777+
);
1778+
}
1779+
1780+
async function ComponentB() {
1781+
await promiseB;
1782+
return 'Hello';
1783+
}
1784+
1785+
function App() {
1786+
return (
1787+
<Suspense fallback="Loading A">
1788+
<ComponentA />
1789+
</Suspense>
1790+
);
1791+
}
1792+
1793+
const controller = new AbortController();
1794+
let pendingResult;
1795+
await serverAct(async () => {
1796+
pendingResult = ReactDOMFizzStatic.prerender(<App />, {
1797+
signal: controller.signal,
1798+
onError(x) {
1799+
errors.push(x.message);
1800+
},
1801+
});
1802+
});
1803+
1804+
controller.abort();
1805+
1806+
const prerendered = await pendingResult;
1807+
const postponedState = JSON.stringify(prerendered.postponed);
1808+
1809+
await readIntoContainer(prerendered.prelude);
1810+
expect(getVisibleChildren(container)).toEqual('Loading A');
1811+
1812+
await resolveA();
1813+
1814+
expect(prerendered.postponed).not.toBe(null);
1815+
1816+
const controller2 = new AbortController();
1817+
await serverAct(async () => {
1818+
pendingResult = ReactDOMFizzStatic.resumeAndPrerender(
1819+
<App />,
1820+
JSON.parse(postponedState),
1821+
{
1822+
signal: controller2.signal,
1823+
onError(x) {
1824+
errors.push(x.message);
1825+
},
1826+
},
1827+
);
1828+
});
1829+
1830+
controller2.abort();
1831+
1832+
const prerendered2 = await pendingResult;
1833+
const postponedState2 = JSON.stringify(prerendered2.postponed);
1834+
1835+
await readIntoContainer(prerendered2.prelude);
1836+
expect(getVisibleChildren(container)).toEqual('Loading B');
1837+
1838+
await resolveB();
1839+
1840+
const dynamic = await serverAct(() =>
1841+
ReactDOMFizzServer.resume(<App />, JSON.parse(postponedState2)),
1842+
);
1843+
1844+
await readIntoContainer(dynamic);
1845+
expect(getVisibleChildren(container)).toEqual('Hello');
1846+
});
17611847
});

0 commit comments

Comments
 (0)