当应用程序正在侦听端口 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。

我的尝试

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')

可能会解决问题。