node.js - Jest 没有正确退出

标签 node.js rest unit-testing jestjs

在 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 上查看过,但没有任何帮助,或者只是一种解决方法。如何正确关闭连接?

最佳答案

我刚开始使用 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();
});

关于node.js - Jest 没有正确退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57933788/

相关文章:

rest - 由于暴力攻击而被锁定的用户的正确http状态是什么?

json - Spring MVC REST 通过返回 JSON 处理错误的 URL (404)

c# - Microsoft 单元测试替代 InlineData 或 TestCase 属性的方法是什么?

c# - 如何在我的 MSTest 单元测试中检查 "no exception occurred"?

javascript - 拥有数千名用户的Node js电子商务

javascript - 使用 socket node.js 检测用户切换页面

javascript - 我们可以在折线 Bing map 上使用事件(单击 - 悬停)吗?

javascript - 在 Jest 测试中将通用数据放在哪里

node.js - Google 数据存储无法在 Docker 内部连接

javascript - 更新酒店房间预订数组 - Mongoose