使用Mock和Stub隔离外部依赖,通过工具如unittest.mock、responses、jest.mock等模拟API响应,结合JSDOM、React Testing Library等框架模拟浏览器环境,定义多场景响应验证错误处理,在复杂场景下采用Docker仿真服务或契约测试Pact,确保测试可重复、快速且稳定。

模拟复杂的第三方 API 或浏览器环境,核心是隔离外部依赖,让测试可重复、快速且稳定。关键是使用合适的工具和策略来伪造行为,而不是直接调用真实服务。
使用 Mock 和 Stub 模拟 API 行为
在单元或集成测试中,你不应该真正调用第三方 API。可以使用 mock 工具拦截请求并返回预设的响应。
- 在 Python 中,unittest.mock 或 responses 库可以拦截 HTTP 请求,返回固定 JSON 数据
- 在 JavaScript/Node.js 中,jest.mock() 可以替换模块,nock 或 msw (Mock Service Worker) 能拦截 fetch/XHR 请求
- 定义多种响应场景:成功、超时、404、500 错误,验证你的代码是否正确处理各种情况
模拟浏览器环境(前端测试)
前端测试常需模拟 DOM、localStorage、地理位置等浏览器特性。
- 使用 Jest 配合 JSDOM(默认启用)来模拟浏览器环境,支持基本的 DOM 操作
- 对于组件测试,React Testing Library 或 Vue Test Utils 在模拟环境中渲染组件,触发事件并断言输出
- 手动 mock 全局对象,比如 navigator.geolocation 或 window.scrollTo,防止测试因缺失 API 失败
使用容器或真实环境快照(高级场景)
某些复杂 API 交互难以完全 mock,比如 OAuth 流程或多步 Webhook 回调。
- 用 Docker 启动一个本地仿真服务,模拟第三方 API 的完整行为
- 借助 Pact 做契约测试,确保你的请求格式与对方 API 约定一致
- 录制真实请求(如用 VCR.py 或 betamax),回放用于测试,避免频繁调用线上接口
基本上就这些。重点是根据测试层级选择合适方式:单元测试用 mock,集成测试可用仿真服务,避免让测试依赖网络或外部系统状态。










