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

Vitest调用本地Quarkus接口遇ECONNREFUSED错误,浏览器及应用可正常访问

问题排查与解决方法

1. IPv6/IPv4 地址绑定差异

错误信息显示连接的是::1(IPv6的localhost),但你的Quarkus服务器可能仅绑定了IPv4的127.0.0.1。浏览器通常会在IPv6连接失败时自动 fallback 到IPv4,但Node.js环境下的fetch可能优先使用IPv6地址,导致连接被拒绝。

解决方法:将测试代码里的URL从http://localhost:9000/api/test改为http://127.0.0.1:9000/api/test,强制使用IPv4连接。

2. 网络环境隔离问题

如果Quarkus服务器运行在Docker容器或虚拟机中,Vitest所在的本地Node进程的localhost指向自身进程的网络空间,而非服务器所在的容器/虚拟机网络,自然会连接失败。

解决方法:

  • 用宿主机的局域网IP(如192.168.x.x)替换localhost;
  • 若使用Docker容器,确保端口映射正确,Windows/macOS环境可使用host.docker.internal,Linux环境直接用宿主机IP访问容器内服务。

3. 测试进程与服务器启动时序验证(低概率)

虽然你设置了beforeAll超时,但极端情况下测试代码发起请求时,Quarkus可能还未完成初始化(如数据库连接、依赖加载),导致临时拒绝连接。

解决方法:在beforeAll中添加重试逻辑,循环请求直到成功或超时:

beforeAll(async () => {
  const maxRetries = 10;
  let retries = 0;
  let success = false;

  while (!success && retries < maxRetries) {
    try {
      response = await fetch('http://127.0.0.1:9000/api/test');
      body = await response.json();
      success = true;
    } catch (err) {
      retries++;
      await new Promise(resolve => setTimeout(resolve, 2000)); // 间隔2秒重试
    }
  }

  if (!success) throw new Error('重试多次后仍无法连接服务器');
}, BEFORE_ALL_TIMEOUT);

4. Vitest 配置网络限制排查(低概率)

虽然外部API调用正常,但可检查Vitest配置是否存在影响本地请求的规则。

解决方法:查看vite.config.ts或vitest.config.ts,确保无拦截本地请求的配置:

import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    isolate: false, // 尝试关闭隔离模式
  },
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:18:29