Node + Express API 中检测到的打开句柄会阻止 Jest 退出

问题描述 投票:0回答:2

我正在尝试使用 Jest 和 Supertest 测试在 Node + Express 中制作的非常基本的 API,但我收到以下输出警告:

Jest has detected the following 1 open handle potentially keeping Jest from exiting:

  ●  TCPSERVERWRAP

    > 34 | const server = app.listen(PORT, () => {
         |                    ^
      35 |     console.log(`Server is running on port ${PORT}.`);
      36 | });
      37 | 

我的服务器在服务器入口JS文件中是这样定义的:

const server = app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}.`);
});

module.exports = server;

我的测试文件如下所示:

describe('Users endpoint', () => {
    let server;

    beforeEach(() => { server = require('../server'); });
    afterEach((done) => { server.close(done); });

    it('should create new user if we do a POST', (done) => {
        request(server)
            .get('/api/users')
            .expect(200)
            .end(done);
    });
});

据我所知,调用

server.close()
并在 afterEach 函数上传递 done 参数应该确保服务器在每次单元测试后关闭,但事实并非如此。

我错过了什么吗?

已经找到解决方案

除了我唯一的测试用例之外添加一个新的测试用例并修改 afterEach 函数后,删除 done 参数,如下所示:

afterEach(() => { server.close(); });

打开手柄警告不再显示。

node.js api express jestjs supertest
2个回答
0
投票

我的服务器的定义和你一样。但在我所有的测试都通过之后,我想杀死JEST

如果有人也想这样做

在你的 file.test.js 顶部添加

const server = require('../app');

最后

afterAll((done) => server.close(done));

0
投票
if (process.env.NODE_ENV !== 'test') {
  const port = process.env.PORT || 3000;
  app.listen(port, () => {
    console.log(`Server started on port ${port}.`);
  });
};
© www.soinside.com 2019 - 2024. All rights reserved.