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

Posted

技术标签:

【中文标题】在 Node + Express API 中检测到的打开句柄会阻止 Jest 退出【英文标题】:Open handle detected in Node + Express API prevents Jest from exiting 【发布时间】: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(); );

打开句柄警告不再显示。

【问题讨论】:

【参考方案1】:

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

如果有人想这样做

在你上面添加file.test.js

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

最后

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

【讨论】:

以上是关于在 Node + Express API 中检测到的打开句柄会阻止 Jest 退出的主要内容,如果未能解决你的问题,请参考以下文章

在 Node Express 中检测社交机器人

Rest API Node Js & Express,创建链接(href)到自己

如何在 Node/Express 应用程序中处理 api 版本

通过 NODE JS & express & jquery 向任何 API 提交请求后,在 HTML 中打印 var 值

使用 cors、express 和 google api 的 Node.js 服务器应用程序在 Azure 部署后无法正常工作

带有 Express 异步 API 调用的 Node.JS