我正在努力使用 supertest 解决我的玩笑测试中的一个错误,我认为这是我的测试而不是我的代码的问题。
我的问题
我正在尝试使用 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 上成功运行。但是当我运行以下测试时:
//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 响应),但只有在它连接到正确的端口后(即我遇到了第一个障碍)。