当应用程序正在侦听端口 3000(快速和超级测试)时,Jest 测试失败并显示 'connect ECONNREFUSED 127.0.0.1:80'
Jest test failing with 'connect ECONNREFUSED 127.0.0.1:80' when app is listening on port 3000 (express and supertest)
我正在使用 supertest 努力解决我的 jest 测试中的错误,我认为这是我的测试而不是我的代码的问题。
我的问题
我正在尝试使用 node.js 创建后端 API 并使用 TDD 进行表达。我有以下文件来设置服务器:
//in app.js
const express = require('express');
const app = express();
app.post('api/1.0/users', (req, res) => {
return res.send();
});
module.exports = app;
//in index.js
const app = require('./app');
const port = 3000;
app.listen(port, () => console.log(`listening on port: ${port}`));
当我 运行 服务器时,它在端口 3000 上成功 运行s。但是当我 运行 以下测试时:
//in UserRegister.test.js
const request = require('supertest');
const app = require('../app'); //this is in a __tests__ subdir hence '..'
it('returns 200 OK when sign-up request is valid', (done) => {
request(app)
.post('api/1.0/users')
.send({
first_name: 'person',
last_name: 'one',
password: '123',
})
.expect(200, done);
});
问题
我收到错误 connect ECONNREFUSED 127.0.0.1:80
。
我认为这告诉我测试正在寻找连接到端口 80,但是端口 80 上没有设置服务器,因此连接被拒绝,但它应该尝试连接到端口 3000。
我的尝试
- 据我所知,所有软件包都已正确安装
- 我尝试了一个让我的服务器侦听端口 80 的 hacky 解决方案,但这引发了同样的问题。
- 阅读超级测试文档以尝试替代解决方案
- 尝试了以下不同的语法,以防我误解了一个明显的语法问题:
it('returns 200 OK when sign-up request is valid', async () => {
const response = await request(app).post('api/1.0/users')
.send({
first_name: 'person',
last_name: 'one',
password: '123',
})
expect(response.statusCode).toEqual(200);
});
我错过了什么?我越来越相信这是我对超级测试的工作原理缺乏了解,但我似乎无法理解问题所在。
我只是在寻找通过或失败的测试(通过获得 200 或 404 响应),但只有在它连接到正确的端口后(即我遇到了第一个障碍)。
URI 有问题。我刚刚尝试了一个测试 url 没有开始使用 /
并且得到了同样的错误。所以改为
.post('api/1.0/users')
使用
.post('/api/1.0/users')
可能会解决问题。
我正在使用 supertest 努力解决我的 jest 测试中的错误,我认为这是我的测试而不是我的代码的问题。
我的问题
我正在尝试使用 node.js 创建后端 API 并使用 TDD 进行表达。我有以下文件来设置服务器:
//in app.js
const express = require('express');
const app = express();
app.post('api/1.0/users', (req, res) => {
return res.send();
});
module.exports = app;
//in index.js
const app = require('./app');
const port = 3000;
app.listen(port, () => console.log(`listening on port: ${port}`));
当我 运行 服务器时,它在端口 3000 上成功 运行s。但是当我 运行 以下测试时:
//in UserRegister.test.js
const request = require('supertest');
const app = require('../app'); //this is in a __tests__ subdir hence '..'
it('returns 200 OK when sign-up request is valid', (done) => {
request(app)
.post('api/1.0/users')
.send({
first_name: 'person',
last_name: 'one',
password: '123',
})
.expect(200, done);
});
问题
我收到错误 connect ECONNREFUSED 127.0.0.1:80
。
我认为这告诉我测试正在寻找连接到端口 80,但是端口 80 上没有设置服务器,因此连接被拒绝,但它应该尝试连接到端口 3000。
我的尝试
- 据我所知,所有软件包都已正确安装
- 我尝试了一个让我的服务器侦听端口 80 的 hacky 解决方案,但这引发了同样的问题。
- 阅读超级测试文档以尝试替代解决方案
- 尝试了以下不同的语法,以防我误解了一个明显的语法问题:
it('returns 200 OK when sign-up request is valid', async () => {
const response = await request(app).post('api/1.0/users')
.send({
first_name: 'person',
last_name: 'one',
password: '123',
})
expect(response.statusCode).toEqual(200);
});
我错过了什么?我越来越相信这是我对超级测试的工作原理缺乏了解,但我似乎无法理解问题所在。
我只是在寻找通过或失败的测试(通过获得 200 或 404 响应),但只有在它连接到正确的端口后(即我遇到了第一个障碍)。
URI 有问题。我刚刚尝试了一个测试 url 没有开始使用 /
并且得到了同样的错误。所以改为
.post('api/1.0/users')
使用
.post('/api/1.0/users')
可能会解决问题。