Files
gdm-Servo-model/tests/rendered-html.test.mjs
2026-08-14 15:38:24 +08:00

56 lines
1.8 KiB
JavaScript

import assert from "node:assert/strict";
import { access, readFile } from "node:fs/promises";
import test from "node:test";
const templateRoot = new URL("../", import.meta.url);
async function render() {
const workerUrl = new URL("../dist/server/index.js", import.meta.url);
workerUrl.searchParams.set("test", `${process.pid}-${Date.now()}`);
const { default: worker } = await import(workerUrl.href);
return worker.fetch(
new Request("http://localhost/", {
headers: { accept: "text/html" },
}),
{
ASSETS: {
fetch: async () => new Response("Not found", { status: 404 }),
},
},
{
waitUntil() {},
passThroughOnException() {},
},
);
}
test("server-renders the product selector site", async () => {
const response = await render();
assert.equal(response.status, 200);
assert.match(response.headers.get("content-type") ?? "", /^text\/html\b/i);
const html = await response.text();
assert.match(html, /高徳乐 AI 舵机选型助手/);
assert.match(html, /243/);
assert.match(html, /286/);
assert.match(html, /精密齿轮配件/);
assert.doesNotMatch(html, /Your site is taking shape|react-loading-skeleton|codex-preview/i);
});
test("keeps starter preview infrastructure out of production", async () => {
const [page, layout, packageJson] = await Promise.all([
readFile(new URL("../app/page.tsx", import.meta.url), "utf8"),
readFile(new URL("../app/layout.tsx", import.meta.url), "utf8"),
readFile(new URL("../package.json", import.meta.url), "utf8"),
]);
assert.doesNotMatch(page, /SkeletonPreview|codex-preview|_sites-preview/);
assert.doesNotMatch(layout, /codex-preview|_sites-preview|Starter Project/);
assert.doesNotMatch(packageJson, /react-loading-skeleton/);
await assert.rejects(
access(new URL("public/_sites-preview", templateRoot)),
);
});