Files
wehub-resource-sync 70bf21e064
Deploy (to testing) and Test Playground Preview Worker / Deploy Playground Preview Worker (testing) (push) Has been skipped
Deploy Workers Shared Staging / Deploy Workers Shared Staging (push) Failing after 0s
Prerelease / build (push) Has been skipped
Handle Changesets / Handle Changesets (push) Has been cancelled
Semgrep OSS scan / semgrep-oss (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:30:11 +08:00

43 lines
1.2 KiB
TypeScript

import { page, viteTestUrl } from "./index";
/**
* Fetches JSON from the server using direct fetch (no browser).
* Use this for tests that only need to hit API endpoints without browser interaction.
* This avoids the race condition in `getJsonResponse` which uses Playwright's
* `page.waitForResponse()` that can hang on Windows.
*/
export async function fetchJson(path = "/"): Promise<unknown> {
const url = `${viteTestUrl}${path}`;
const response = await fetch(url);
const text = await response.text();
try {
return JSON.parse(text);
} catch {
throw new Error("Invalid JSON response:\n" + text);
}
}
export async function getTextResponse(path = "/"): Promise<string> {
const response = await getResponse(path);
return response.text();
}
export async function getJsonResponse(
path = "/"
): Promise<null | Record<string, unknown> | Array<unknown>> {
const response = await getResponse(path);
const text = await response.text();
try {
return JSON.parse(text);
} catch {
throw new Error("Invalid JSON response:\n" + text);
}
}
export async function getResponse(path = "/") {
const url = `${viteTestUrl}${path}`;
const response = page.waitForResponse(url);
await page.goto(url);
return response;
}