NodeJS 在jest上,工作进程无法正常退出,已被强制退出

5sxhfpxr  于 2022-12-12  发布在  Node.js
关注(0)|答案(2)|浏览(216)

当我运行单元测试时,我收到以下警告。

工作进程未能正常退出,已被强制退出。这可能是由于不正确的拆卸导致测试泄漏所致。请尝试使用--detectOpenHandles运行以查找泄漏。活动计时器也可能导致此问题,请确保对它们调用了.unref()。

当我使用--detectOpenHandles时,它给我以下错误。

为了解决这个问题,现在我在package.json脚本上使用以下命令。

"test:ci": "jest --runInBand --forceExit"

然而,我对这个解决方案并不满意,而且我仍然收到了使用--detectOpenHandles的警告。
看来,我写异步测试的方式是错误的?或者如何才能正确地修复它?
请注意,我已正确关闭了数据库连接。

afterAll(async () => {
  if (mongo) {
    await mongo.stop();
  }
  mongoose.connection.close();
});

公寓测试的代码。

import request from 'supertest';
import { app } from '../../app';

it('fails when a email that does not exist is supplied', async () => {
  await request(app)
    .post('/api/users/signin')
    .send({
      email: 'test@test.com',
      password: 'password',
    })
    .expect(400);
});

it('fails when an incorrect password is supplied', async () => {
  await request(app)
    .post('/api/users/signup')
    .send({
      email: 'test@test.com',
      password: 'password',
    })
    .expect(201);

  await request(app)
    .post('/api/users/signin')
    .send({
      email: 'test@test.com',
      password: 'aslkdfjalskdfj',
    })
    .expect(400);
});

it('responds with a cookie when given valid credentials', async () => {
  await request(app)
    .post('/api/users/signup')
    .send({
      email: 'test@test.com',
      password: 'password',
    })
    .expect(201);

  const response = await request(app)
    .post('/api/users/signin')
    .send({
      email: 'test@test.com',
      password: 'password',
    })
    .expect(200);

  expect(response.get('Set-Cookie')).toBeDefined();
});

先谢谢你了。

67up9zun

67up9zun1#

您的Express应用程序在启动时可能会执行一些在测试套件中未被嘲笑的操作。
也许它会对另一个服务进行真实的的获取调用,以获得关于生态系统的信息,或者连接到一个redis示例,或者某种日志聚合器。
您可能需要查看所有应用程序代码,以确定它所依赖的外部功能,然后确保您的测试套件创建了足够的填充程序,以便应用程序可以在测试期间可靠地关闭。
有时候,像这样的应用服务器有一个显式的关闭函数,当它从编排器接收到一个kill信号时,它的主机容器会调用这个函数。如果你的应用有一个函数,那么这个函数可能就像你会发现的外部依赖列表一样。

apeeds0o

apeeds0o2#

我也遇到了同样的问题,只是我的app.js文件中缺少了一个反斜杠。
因此,jest无法连接到路由,这对于发送该请求的jest worker来说是一个死胡同。
尝试检查app.js文件中的路径

相关问题