Jest无法正常退出。

3

在nodeJS中使用Jest运行这个集成测试时:

const request = require("supertest");
let server;

describe("/api/chat", () => {
  beforeEach(() => {
    server = require("../../api");
  });
  describe("GET /userlist", () => {
    it("show userlist", async () => {
      const result = await request(server)
        .get("/api/chat/userlist")
        .set("X-Auth", process.env.XAuth);
      expect(result.status).toBe(200);
    });
  });
  afterAll(done => {
    server.close(done);
  });
});

使用api.js文件:
const PORT = process.env.PORT;

const server = app.listen(PORT, () => {
  console.log(`listening on port ${PORT}`);
});

app.use("/api/chat", chat);

module.exports = server;

我遇到一个错误,有些东西阻止它退出:
Jest has detected the following 1 open handle potentially keeping Jest from exiting:

  ●  TCPSERVERWRAP

      21 | const PORT = process.env.PORT;
      22 | 
    > 23 | const server = app.listen(PORT, () => {
         |                    ^
      24 |   console.log(`listening on port ${PORT}`);
      25 | });
      26 | 

有什么想法吗?我已经在Github上检查过了,但没有什么真正有用的,或者只是一种变通方法。如何正确地关闭连接?


你尝试在测试命令中添加 --forceExit--maxWorkers=10 参数了吗? - Ndx
有没有其他相关的代码正在执行?我尝试复制您的错误,但在问题中提供的代码下无法复制...它似乎可以正常执行。 - mgarcia
1个回答

2

我刚开始使用jest,在做了几次实验后,以下方法对我有效。

在测试期间,按照以下方式修改app.js:

const PORT = process.env.PORT;

// COMMENT THESE
// const server = app.listen(PORT, () => {
//  console.log(`listening on port ${PORT}`);
// });

app.use("/api/chat", chat);

module.exports = app; // EXPORT app

在测试文件中使用supertest如下:

// IMPORT app HERE ARE USE IT AS FOLLOWS
await request(app)
        .post("/api/chat")
        .set("Content-Type", "application/json")
        .send({ ...your_payload });

最后关闭数据库连接。

afterAll(done => {
  // THIS IS HOW YOU CLOSE CONNECTION IN MONGOOSE (mongodb ORM)
  mongoose.connection.close();
  done();
});

在我的情况下,我使用 app.close() 关闭了已启动的 Nest 应用程序。 - Aritz

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