返回资源中心

Polly.js

框架库
测试工具
2 次浏览
0 个赞
HTTP测试NetflixJavaScript

资源描述

Polly.js 是 Netflix 开源的 JavaScript HTTP 拦截与回放框架,专为前端和 Node.js 测试场景设计,支持精准记录、重放和模拟 HTTP 请求/响应,显著提升测试稳定性、可重复性与离线开发效率。适用于 CI/CD 环境下的 API 集成测试、UI 组件隔离测试及依赖外部服务的 E2E 测试,是现代 Web 应用测试基础设施的关键组件。

详细内容

# Polly.js — Netflix 开源的 HTTP 拦截与回放框架 ## 框架简介与定位 Polly.js 是由 Netflix 团队构建并开源的轻量级、可扩展的 JavaScript 库,用于**记录(record)、回放(replay)和模拟(mock)HTTP 交互**。它不替代测试框架(如 Jest、Vitest 或 Cypress),而是作为底层网络层抽象,为测试提供确定性、可重现的 HTTP 行为。其设计哲学强调**零侵入式集成**与**环境无关性**(支持浏览器与 Node.js),广泛应用于前端组件测试、服务端集成测试及离线开发调试。 ## 核心特性 - ✅ **多适配器支持**:内置 `XHR`, `Fetch`, `Node.js HTTP/HTTPS` 适配器,可无缝拦截主流请求方式;支持自定义适配器扩展。 - ✅ **三种模式切换**:`record`(首次运行时捕获真实请求并持久化为 cassette)、`replay`(离线复用已录制请求)、`passthrough`(绕过拦截直连真实服务),便于不同测试阶段灵活控制。 - ✅ **Cassette(磁带)持久化**:以 JSON 格式序列化请求/响应快照(含 headers、body、status、timing),支持版本化管理与 Git 跟踪。 - ✅ **精准匹配策略**:支持基于 URL、method、headers、body 等多维度的请求匹配规则,支持通配符与正则表达式,避免误匹配。 - ✅ **插件化架构**:提供 `@pollyjs/core` 核心 + 可选插件(如 `@pollyjs/adapter-fetch`、`@pollyjs/persister-fs`、`@pollyjs/persister-json-snapshots`),按需引入,降低体积开销。 ## 适用场景 - 前端 UI 组件单元测试中隔离第三方 API 依赖(如天气、支付、登录服务) - CI/CD 流水线中消除 flaky network tests,保障测试稳定性与执行速度 - 本地开发时模拟慢网、错误响应(500/404)、超时等边界条件 - 多团队协作中共享标准化的 API 响应快照,统一测试数据基线 - 微前端架构下各子应用独立维护自身 HTTP 录制集,避免跨服务耦合 ## 快速入门步骤 1. **安装**(支持 npm / yarn / pnpm): ```bash npm install @pollyjs/core @pollyjs/adapter-fetch @pollyjs/persister-fs --save-dev ``` 2. **基础配置与启用**(以 Jest 环境为例): ```js import { Polly } from '@pollyjs/core'; import FetchAdapter from '@pollyjs/adapter-fetch'; import FSPersister from '@pollyjs/persister-fs'; Polly.register(FetchAdapter); Polly.register(FSPersister); const polly = new Polly('my-test', { adapters: ['fetch'], persister: 'fs', mode: 'replay', // 可设为 'record' 首次生成 cassette persisterOptions: { fs: { recordingsDir: './tests/__recordings__' } } }); // 测试结束后清理 afterAll(() => polly.stop()); ``` 3. **运行测试**:首次执行自动创建 `./tests/__recordings__/my-test.json`;后续默认回放,确保结果一致。 ## 生态与社区说明 Polly.js 由 Netflix 主导开源(GitHub 仓库:`netflix/pollyjs`),虽已于 2022 年进入**维护模式**(不再新增特性,仅修复关键 bug),但因其稳定性和成熟度,仍被大量企业项目(如 Shopify、Expedia 等)长期采用。社区活跃于 GitHub Issues 与 Discussions,文档完整且示例丰富;配套工具链(如 `polly-cli`)支持 cassette 格式校验与批量管理。建议新项目评估 [MSW (Mock Service Worker)] 作为现代替代方案,但 Polly.js 在 Node.js 环境与复杂 cassette 管理场景中仍有不可替代价值。