标准答案
- 单元测试通常直接构造函数输入,不需要启动后端或真实网络请求。
- 组件测试可以 mock service 层、API client 或使用 MSW 这类网络层拦截,保持组件交互接近真实。
- E2E 测试应使用专门测试环境、固定账号、种子数据和可重置状态,避免污染生产或依赖随机数据。
- Mock 数据要来自明确契约,例如 OpenAPI、类型定义、fixture 或测试工厂,避免和真实接口结构漂移。
- 关键接口仍需要契约测试或少量集成验证,防止 mock 一直通过但真实接口已经变了。
题目解析
Mock 的位置取决于测试想验证什么。如果只是验证价格计算,直接传入数据最简单;如果要验证组件收到接口返回后的 loading、成功、失败状态,mock API 层或网络层更合适。
测试依赖真实后端会带来不稳定:账号状态变了、网络抖动、数据被别人改了、接口限流或环境维护都会让测试失败。自动化测试需要可重复、可重置、可诊断。
但 mock 也不能脱离真实契约。fixture 长期没人维护,字段删了测试还绿,就是假安全。更稳的是用契约、类型、测试工厂和少量真实集成检查约束 mock。
代码示例
组件测试里可以用网络层 mock 同时覆盖成功和失败分支。
JavaScript
server.use(
http.get('/api/user', () => {
return HttpResponse.json({
id: 'u_1',
name: 'Luo'
})
})
)常见误区
- 自动化测试直接依赖生产或共享测试环境里的随机数据。
- Mock 数据散落在测试里,接口字段变化后很难统一维护。
- Mock 过度,完全不做契约或集成验证,真实接口坏了测试仍然通过。