Files
cloudflare__vinext/tests/pages-dev-hydration.test.ts
T
James Anderson bdc7703b5e fix(pages): align middleware rewrite navigation (#2891)
* fix(pages): align middleware rewrite navigation

* fix(pages): classify localized route queries

* fix(pages): close middleware review gaps

* fix(router): preserve dynamic params in rewrite queries

* fix(link): preserve app prefetch in hybrid routes
2026-08-12 13:38:45 +01:00

58 lines
2.6 KiB
TypeScript

import { describe, expect, it } from "vite-plus/test";
import { createPagesDevHydrationScript } from "../packages/vinext/src/server/pages-dev-hydration.js";
describe("createPagesDevHydrationScript", () => {
it("generates the normal Pages Router hydration entry", () => {
const script = createPagesDevHydrationScript({
appModuleSource: "/pages/_app.tsx",
pageModuleSource: "/pages/index.tsx",
reactStrictMode: true,
replaceFallbackRoute: true,
scriptNonce: "nonce-value",
});
expect(script).toContain('<script type="module" nonce="nonce-value">');
expect(script).toContain("_initializePagesRouterReadyFromNextData(nextData);");
expect(script).toContain('() => import("/pages/index.tsx")');
expect(script).toContain('() => import("/pages/_app.tsx")');
expect(script).toContain("const appRouter = Router;");
expect(script).not.toContain("pageProps: rawPageProps,");
expect(script).toContain("const shouldHydrateQuery =");
expect(script).toContain("const initialMatchesMiddleware =");
expect(script).toContain("nextData.__vinext?.hasMiddleware === true");
expect(script).toContain("nextData.__vinext?.hasRewrites === true");
expect(script).toContain("shallow: !nextData.isFallback && !initialMatchesMiddleware");
expect(script).not.toContain("window.__VINEXT_PAGE_PATTERNS__ = [nextData.page]");
});
it("generates the forced-ready error hydration entry", () => {
const script = createPagesDevHydrationScript({
appModuleSource: null,
forceRouterReady: true,
normalizePageProps: false,
pageModuleSource: "next/error",
reactStrictMode: false,
setPagePatternsFromNextData: true,
});
expect(script).toContain("_initializePagesRouterReadyFromNextData(nextData, true);");
expect(script).toContain("window.__VINEXT_PAGE_PATTERNS__ = [nextData.page];");
expect(script).toContain('() => import("next/error")');
expect(script).toContain("const pageProps = rawPageProps ?? {};");
expect(script).toContain("element = React.createElement(PageComponent, pageProps);");
expect(script).not.toContain("if (nextData.isFallback)");
expect(script).not.toContain("const appRouter =");
});
it("serializes module specifiers safely", () => {
const script = createPagesDevHydrationScript({
appModuleSource: '/pages/_app"quoted.tsx',
pageModuleSource: "/pages/line\nfeed.tsx",
reactStrictMode: false,
});
expect(script).toContain('import("/pages/_app\\"quoted.tsx")');
expect(script).toContain('import("/pages/line\\nfeed.tsx")');
});
});