在 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 退出的主要内容,如果未能解决你的问题,请参考以下文章
Rest API Node Js & Express,创建链接(href)到自己
如何在 Node/Express 应用程序中处理 api 版本
通过 NODE JS & express & jquery 向任何 API 提交请求后,在 HTML 中打印 var 值
使用 cors、express 和 google api 的 Node.js 服务器应用程序在 Azure 部署后无法正常工作