import { type Page, type Route } from "@playwright/test"; /** * 拦截 API 请求并返回预设数据。 * @param page Playwright Page 对象 * @param endpoint 匹配的端点模式(字符串或正则表达式) * @param responseData 返回的响应数据 * @param statusCode HTTP 状态码,默认 200 */ export async function mockApi( page: Page, endpoint: string | RegExp, responseData: unknown, statusCode: number = 200, ): Promise { await page.route(endpoint, async (route: Route) => { await route.fulfill({ status: statusCode, contentType: "application/json", body: JSON.stringify(responseData), }); }); } /** * 模拟 API 错误响应。 * @param page Playwright Page 对象 * @param endpoint 匹配的端点模式(字符串或正则表达式) * @param statusCode HTTP 错误状态码,默认 500 */ export async function mockApiError( page: Page, endpoint: string | RegExp, statusCode: number = 500, ): Promise { await page.route(endpoint, async (route: Route) => { await route.fulfill({ status: statusCode, contentType: "application/json", body: JSON.stringify({ error: "Internal Server Error" }), }); }); } /** * 模拟 API 延迟响应。 * @param page Playwright Page 对象 * @param endpoint 匹配的端点模式(字符串或正则表达式) * @param ms 延迟毫秒数 */ export async function mockApiDelay( page: Page, endpoint: string | RegExp, ms: number, ): Promise { await page.route(endpoint, async (route: Route) => { await new Promise((resolve) => setTimeout(resolve, ms)); await route.continue(); }); } /** * 清除所有路由拦截。 * @param page Playwright Page 对象 */ export async function clearApiMocks(page: Page): Promise { await page.unrouteAll(); }