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

4

我正在尝试使用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(); }); 这样就不会再出现打开句柄的警告了。
1个回答

0

我的服务器和你的定义一样。但是在所有测试都通过后,我想要终止JEST

如果有人想要做同样的事情

在你的file.test.js文件顶部添加以下内容:

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

最后

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接