【问题标题】:Open handle detected in Node + Express API prevents Jest from exiting在 Node + Express API 中检测到的打开句柄会阻止 Jest 退出
【发布时间】:2020-11-13 07:33:38
【问题描述】:

我正在尝试使用 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


    【解决方案1】:

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

    如果有人想这样做

    在你上面添加file.test.js

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

    最后

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

    【讨论】:

      猜你喜欢
      • 2019-06-30
      • 2019-03-13
      • 2020-08-24
      • 2020-09-20
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 2021-06-13
      • 2018-11-14
      相关资源
      最近更新 更多