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

Jest27.5.1集成测试本地正常 CI流水线报ECONNREFUSED错误

Jest 27.5.1 集成测试CI环境ECONNREFUSED 127.0.0.1:80报错修复方案

这个报错的核心是测试代码在CI环境发起了指向本地80端口的真实网络请求,但CI执行测试阶段没有任何服务监听80端口,同时测试的mock配置、全局状态清理存在遗漏,造成跨用例状态污染,因此跳过单个报错用例也无法阻断后续异常。

按以下顺序排查修复:

  • 补全测试前置服务启动逻辑
    本地能跑通是因为你的开发环境本来就常驻了占用80端口的前端/后端服务,CI流水线是全新的干净环境,执行jest命令前不会自动启动你的业务服务。不要依赖本地常驻服务跑集成测试,在jest配置中增加globalSetup生命周期钩子,在所有测试执行前拉起待测试的业务服务,确认端口监听正常后再执行测试逻辑,测试全部执行完成后自动关闭拉起的服务,避免残留进程。
    可以在CI脚本的jest执行步骤前插入curl -v http://127.0.0.1:80做快速校验,如果直接返回连接拒绝,即可确认80端口无服务监听的基础问题。
  • 修复Mock服务的拦截规则
    你在afterEach中添加的server.resetHandlers()仅能重置已注册的mock handler,无法拦截未声明mock规则的透传请求:
    1. 先对齐Mock服务的生命周期:在beforeAll中执行服务启动逻辑,afterAll中执行服务关闭逻辑,afterEach中除了重置handler,还要恢复所有请求的默认拦截行为
    2. 给Mock服务启动参数增加未匹配请求的拦截规则,所有没有对应mock规则的请求直接抛出明确错误,禁止透传发送真实网络请求,从根源上避免请求打到不存在的本地80端口。加完这个配置后,可以直接定位到是哪段代码发了未被mock的/callback?usid=请求。
  • 解决全局状态跨用例泄漏问题
    跳过第一个报错用例后后续用例依然报错,说明存在测试文件顶层、或者前序用例初始化的全局实例没有被正确清理:
    1. 重点排查SSO/认证相关SDK的初始化逻辑:报错路径/callback?usid=是典型的登录回调请求,大概率是SDK在文件加载阶段就直接初始化,自动发起了回调请求,和单个测试用例是否跳过无关。测试环境下需要mock掉SDK的自动初始化逻辑,不要触发真实的回调请求发送。
    2. 确认Jest的testEnvironment配置:Jest 27.x版本默认测试环境是node,如果你测试的是前端代码,需要手动把测试环境改成jsdom,否则你写的LocalStorage.clear()运行在node上下文,根本清不掉浏览器环境的缓存,残留的登录态、配置信息会跨用例持续生效,触发异常请求。
    3. 不要在测试文件顶层初始化会发起网络请求的业务实例,所有实例初始化逻辑放到beforeEach中,在afterEach中手动销毁实例,避免跨用例残留。

不要通过修改业务代码里的API请求地址来适配测试环境,这种方式会掩盖真实的请求逻辑问题,后续上线很容易出现环境配置类故障。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:45:44