我正在尝试使用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);
});
});
据我所知,在afterEach函数中调用
server.close()
并传递done参数应该可以确保每个单元测试后服务器都会关闭,但实际上却没有。我有什么遗漏吗?已经找到解决方法了。在除了唯一的测试用例之外添加了一个新的测试用例,并修改了afterEach函数去掉done参数,如下所示:
afterEach(() => { server.close(); });
这样就不会再出现打开句柄的警告了。