Skip to content

Commit 71e5b43

Browse files
committed
Test
1 parent 27fbed5 commit 71e5b43

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

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

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1758,4 +1758,88 @@ 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+
const controller2 = new AbortController();
1815+
await serverAct(async () => {
1816+
pendingResult = ReactDOMFizzStatic.resumeAndPrerender(
1817+
<App />,
1818+
JSON.parse(postponedState),
1819+
{
1820+
signal: controller2.signal,
1821+
onError(x) {
1822+
errors.push(x.message);
1823+
},
1824+
},
1825+
);
1826+
});
1827+
1828+
controller2.abort();
1829+
1830+
const prerendered2 = await pendingResult;
1831+
const postponedState2 = JSON.stringify(prerendered2.postponed);
1832+
1833+
await readIntoContainer(prerendered2.prelude);
1834+
expect(getVisibleChildren(container)).toEqual('Loading B');
1835+
1836+
await resolveB();
1837+
1838+
const dynamic = await serverAct(() =>
1839+
ReactDOMFizzServer.resume(<App />, JSON.parse(postponedState2)),
1840+
);
1841+
1842+
await readIntoContainer(dynamic);
1843+
expect(getVisibleChildren(container)).toEqual('Hello');
1844+
});
17611845
});

0 commit comments

Comments
 (0)