You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置PollyJS在Jest集成测试中忽略本地服务器请求并录制外部服务请求

解决PollyJS忽略本地服务器请求、仅录制外部服务请求的配置方案

我之前在做集成测试时也碰到过完全一样的场景,折腾了一会儿才摸清楚PollyJS的正确配置方式。核心就是通过排除本地请求规则+精准匹配外部请求的组合来实现需求,给你详细说下步骤:

核心配置思路

我们需要告诉PollyJS两件事:

  1. 完全忽略对127.0.0.1:3000的所有请求,不要拦截或录制它们
  2. 正常拦截并录制所有发往外部服务(比如example.com)的请求

具体实现代码

假设你用的是Jest测试框架,搭配@pollyjs/core和@pollyjs/adapter-node-http适配器(因为要拦截Node环境中本地服务器发起的请求),配置示例如下:

import { Polly } from '@pollyjs/core';
import NodeHttpAdapter from '@pollyjs/adapter-node-http';

// 注册Node环境的HTTP适配器
Polly.register(NodeHttpAdapter);

describe('集成测试:仅录制外部服务请求', () => {
  let pollyInstance;

  beforeEach(() => {
    pollyInstance = new Polly('外部服务调用录制', {
      // 指定使用Node HTTP适配器,确保能拦截本地服务器发起的请求
      adapters: ['node-http'],
      // 根据需求设置:true表示录制未存的请求,false表示仅回放已有录制
      recordIfMissing: true,
      // 配置请求匹配规则,确保外部请求能被正确识别
      matchRequestsBy: {
        method: true,
        url: {
          protocol: true,
          hostname: true,
          pathname: true,
          query: true
        }
      },
      // 关键:排除本地服务器的所有请求
      excludeUrl: /^http:\/\/127\.0\.0\.1:3000/
    });
  });

  afterEach(async () => {
    // 停止Polly并保存录制内容(如果开启了录制)
    await pollyInstance.stop();
  });

  it('测试本地接口,仅录制外部依赖请求', async () => {
    // 发起对本地服务器的请求
    const localResponse = await fetch('http://127.0.0.1:3000/api/some-path');
    const responseData = await localResponse.json();

    // 你的断言逻辑
    expect(localResponse.ok).toBe(true);
    expect(responseData).toHaveProperty('expectedField');
  });
});

关键配置说明

  • excludeUrl:这里用正则表达式精准匹配本地服务器的URL前缀,Polly会自动跳过这些请求的拦截和录制。如果你的本地服务器用localhost:3000,记得把正则改成/^http:\/\/localhost:3000/。
  • adapters: ['node-http']:这个非常重要!因为本地服务器是在Node环境中运行的,它发起的外部请求需要Node适配器来拦截,默认的浏览器适配器是管不到服务器端请求的。
  • matchRequestsBy:确保请求匹配规则足够精准,避免误匹配或漏匹配外部请求。上面的配置会匹配请求方法、协议、域名、路径和查询参数,基本能覆盖大部分场景。

常见坑点提示

  1. 确保Polly的初始化早于本地服务器的启动,这样才能在服务器发起外部请求前就完成拦截配置。
  2. 如果本地服务器有多个端口或域名,要调整excludeUrl的正则,比如用/(http:\/\/127\.0\.0\.1:3000|http:\/\/localhost:3000)/来兼容两种地址。
  3. 检查Polly的录制存储目录(默认是__recordings__),确认只有外部服务的请求被录制下来,本地请求不会出现在录制文件中。

内容的提问来源于stack exchange,提问作者Guy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 05:02:51