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

Jest+Supertest测试随机报read ECONNRESET无堆栈跟踪求助

解决Jest+Supertest随机出现read ECONNRESET测试失败的方案

可能的原因与对应解决方法

1. 测试并发导致服务器未正确关闭或端口冲突

Jest默认并行执行测试,若测试用例未妥善关闭Supertest关联的服务器实例,会造成端口占用、连接未释放,进而触发连接重置错误。

  • 处理方式:
    • 在测试文件中通过beforeAll启动服务器(使用随机端口避免冲突),afterAll确保服务器彻底关闭:
      let server;
      beforeAll(() => {
        server = app.listen(0); // 0表示自动分配随机端口
      });
      afterAll(async () => {
        await server.close();
      });
      
    • 若使用supertest.agent,需在每个测试结束后销毁agent实例:
      const agent = request.agent(app);
      afterEach(async () => {
        await agent.close();
      });
      

2. 并行测试的资源竞争问题

大量测试并行运行时,数据库/Redis连接池可能耗尽,或请求排队超时引发连接重置。

  • 处理方式:
    • 限制Jest并行进程数,在jest.config.js中调整:
      module.exports = {
        maxWorkers: 2, // 根据机器性能调整,降低并行度
      };
      
    • 调整数据库/Redis连接池大小,匹配测试并发量:
      // Postgres连接池示例
      const pool = new Pool({
        max: 10, // 增大连接池容量,避免请求排队
        idleTimeoutMillis: 30000,
      });
      

3. Supertest请求超时过短

默认请求超时时间不足,高负载下请求未完成就被中断,导致ECONNRESET。

  • 处理方式:
    • 单个请求显式设置超时:
      await request(app)
        .get('/api/test')
        .timeout(10000); // 设置10秒超时
      
    • 全局配置Supertest超时:
      const request = require('supertest');
      request.Test.prototype.timeout = function(ms) {
        this._timeout = ms;
        return this;
      };
      

4. Node.js HTTP连接复用问题

Node.js HTTP客户端默认复用连接,若服务器端提前关闭连接,客户端会收到连接重置错误。

  • 处理方式:
    • 禁用连接复用,在请求中指定新的Agent实例:
      const http = require('http');
      await request(app)
        .get('/api/test')
        .agent(new http.Agent({ keepAlive: false }));
      

5. macOS系统文件描述符限制过低

macOS默认文件描述符上限不高,大量测试创建HTTP连接时,资源耗尽会引发连接重置。

  • 处理方式:
    • 临时提高限制:
      ulimit -n 4096
      
    • 永久修改需编辑/etc/sysctl.conf,添加:
      kern.maxfiles=4096
      kern.maxfilesperproc=4096
      
      执行以下命令生效:
      sudo sysctl -w kern.maxfiles=4096
      sudo sysctl -w kern.maxfilesperproc=4096
      

内容的提问来源于stack exchange,提问作者Marnix.hoh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:15:04