使用supertest运行Jest测试报connect ECONNREFUSED 127.0.0.1:80 应用监听3000端口
问题根因
- 路由和测试请求的路径缺少开头的
/,属于相对路径解析错误 - 对supertest运行机制理解有误,supertest不需要手动启动端口监听的服务,传入express app实例后会自动启动临时端口完成请求处理,手动启动的3000端口服务和测试逻辑完全无关
报错原因说明
没有前缀/的路径会被识别为相对路径,supertest构造请求时会默认基于http://127.0.0.1拼接路径,默认走80端口,因此会抛出connect ECONNREFUSED 127.0.0.1:80错误,和是否启动3000端口服务没有关联。
解决方案
- 修改app.js中的路由定义,添加路径前缀
/:
// 原代码 app.post('api/1.0/users', (req, res) => { // 修改后 app.post('/api/1.0/users', (req, res) => {
- 修改测试用例中的请求路径,添加前缀
/:
// 原代码 .post('api/1.0/users') // 修改后 .post('/api/1.0/users')
额外优化提示
如果后续需要在接口中读取req.body的请求参数,需要在app.js中注册express的json解析中间件,否则请求体无法被正常解析:
const express = require('express'); const app = express(); // 新增json解析中间件 app.use(express.json());
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

