Playwright page.route() 实现 API 全量 Mock
· 阅读需 4 分钟
在构建 AI Agent 平台时遇到此问题,记录根因与解法。
TL;DR
使用 page.route() 拦截所有 API 请求,返回预定义的 mock 数据。测试不依赖真实后端,可以在任何环境稳定运行,且避免创建/删除数据等副作用。
问题现象
E2E 测试调用真实 API:
// ❌ 依赖真实后端
test('create agent', async ({ authenticatedPage }) => {
await authenticatedPage.goto('/')
// 点击创建按钮
await authenticatedPage.click('button:has-text("Create")')
// 填写表单
await authenticatedPage.fill('input[name="name"]', 'Test Agent')
await authenticatedPage.click('button[type="submit"]')
// 等待 API 响应
await authenticatedPage.waitForTimeout(2000)
// 验证... 但如果后端挂了?如果数据库连接失败?
})
问题:
- 依赖后端状态 — 后端挂了测试就失败
- 数据副作用 — 每次运行创建真实数据
- 不可重复 — 数据变化导致断言失败
- CI 环境问题 — 需要启动完整后端服务