69 lines
1.8 KiB
TypeScript
69 lines
1.8 KiB
TypeScript
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<void> {
|
|
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<void> {
|
|
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<void> {
|
|
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<void> {
|
|
await page.unrouteAll();
|
|
}
|