【发布时间】:2021-10-17 16:33:49
【问题描述】:
我在每个测试文件中都有以下设置:
const supertest = require('supertest');
const app = require('../../app.run');
let request = null;
let server = null;
beforeAll((done) => {
server = app.listen(done);
request = supertest.agent(server);
});
afterAll((done) => {
sequelize.close();
server.close(done);
});
我的应用监听方法如下:
app.listen(process.env.APP_PORT, () => {
logger.info('Server is running on port ' + process.env.APP_PORT);
});
module.exports = app;
现在,当我用 jest 运行所有测试时,服务器似乎没有正确关闭,因为我收到 EADDRINUSE 错误:
Test suite failed to run
listen EADDRINUSE: address already in use :::8081
32 | app.use('/api', require('./app.routes'));
33 |
> 34 | app.listen(process.env.APP_PORT, () => {
| ^
35 | logger.info('Server is running on port ' + process.env.APP_PORT);
36 | });
37 |
at Function.listen (node_modules/express/lib/application.js:618:24)
at Object.<anonymous> (app.run.js:34:5)
at Object.<anonymous> (test/e2e/auth-controller.test.js:3:13)
这是一个测试示例:
it("should register a user", async () => {
await request
.post('/api/users/signup')
.send({email, password, name, surname})
.expect(200);
const user = await User.findOne({where: {email}});
expect(user.active_token).toBeNull();
expect(user.enabled).toBeTruthy();
});
关于如何正确关闭服务器的任何想法?提前感谢您的帮助
【问题讨论】:
-
为什么需要启动express server?
-
我不需要,我很想为所有测试套件启动一次服务器,但我没有找到解决方案
-
不要启动它,只要
request = supertest.agent(app); -
不幸的是它不起作用它仍然尝试调用它两次
-
您删除了
server = app.listen(done);行吗?
标签: node.js express jestjs supertest