首次提交:脑晴测 H5 项目
包含前端源码、预构建产物(dist/)、零依赖 Node.js 服务器(server.mjs)、 Cloudflare Worker 版本(worker/)、部署文档(DEPLOY.md)和交接文档。 技术总监可直接 clone 后运行 node server.mjs 启动,无需安装 React 或 build。 DEEPSEEK_API_KEY 通过环境变量注入,未纳入仓库。
This commit is contained in:
68
brain-h5/tests/sites-worker.test.mjs
Normal file
68
brain-h5/tests/sites-worker.test.mjs
Normal file
@@ -0,0 +1,68 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { access } from "node:fs/promises";
|
||||
import test from "node:test";
|
||||
import worker from "../worker/index.js";
|
||||
|
||||
test("serves existing static assets without a fallback", async () => {
|
||||
const calls = [];
|
||||
const response = await worker.fetch(new Request("https://example.test/assets/app.js"), {
|
||||
ASSETS: {
|
||||
fetch: async (request) => {
|
||||
calls.push(new URL(request.url).pathname);
|
||||
return new Response("asset", { status: 200 });
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.equal(response.status, 200);
|
||||
assert.deepEqual(calls, ["/assets/app.js"]);
|
||||
});
|
||||
|
||||
test("falls back to index.html for an unknown app route", async () => {
|
||||
const calls = [];
|
||||
const response = await worker.fetch(
|
||||
new Request("https://example.test/flow/step-two?source=share", {
|
||||
headers: { accept: "text/html" },
|
||||
}),
|
||||
{
|
||||
ASSETS: {
|
||||
fetch: async (request) => {
|
||||
const url = new URL(request.url);
|
||||
calls.push(url.pathname + url.search);
|
||||
return new Response(url.pathname === "/index.html" ? "app" : "missing", {
|
||||
status: url.pathname === "/index.html" ? 200 : 404,
|
||||
});
|
||||
},
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
assert.equal(response.status, 200);
|
||||
assert.deepEqual(calls, ["/flow/step-two?source=share", "/index.html"]);
|
||||
});
|
||||
|
||||
test("does not turn missing API or write requests into the app shell", async () => {
|
||||
for (const request of [
|
||||
new Request("https://example.test/api/missing", { headers: { accept: "application/json" } }),
|
||||
new Request("https://example.test/flow", { method: "POST", headers: { accept: "text/html" } }),
|
||||
]) {
|
||||
let calls = 0;
|
||||
const response = await worker.fetch(request, {
|
||||
ASSETS: {
|
||||
fetch: async () => {
|
||||
calls += 1;
|
||||
return new Response("missing", { status: 404 });
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.equal(response.status, 404);
|
||||
assert.equal(calls, 1);
|
||||
}
|
||||
});
|
||||
|
||||
test("emits the files required by Sites packaging", async () => {
|
||||
await access(new URL("../dist/client/index.html", import.meta.url));
|
||||
await access(new URL("../dist/server/index.js", import.meta.url));
|
||||
await access(new URL("../dist/.openai/hosting.json", import.meta.url));
|
||||
});
|
||||
Reference in New Issue
Block a user