如何用Jest和Express编写集成测试?

时间:2019-05-12 06:27:47

标签: javascript typescript express jestjs

我正在尝试使用第三方微服务编写集成测试(假设它称为Service)。将请求发送到Service时,它将触发一个Webhook。我想做的是测试它是否正确解析了webhook。

import express from "express";
import bodyParser from "body-parser";

import { handleHook} from "./hook";

export const app = express();
app.use(bodyParser.json(), handleHook);

describe("integration", () => {
  test("hook", async () => {
    const mock = jest.fn();
    app.post("/", (req, res) => {
      mock(req);
      res.send("");
    });

    const p = new Promise<Server>(resolve => {
      const server = app.listen(3000, () => {
        resolve(server);
      });
    });

    const server = await p;
    await upload();
    jest.useFakeTimers();
    setTimeout(() => {
      server.close();
    }, 15000);
    jest.runAllTimers();
    expect(mock).toHaveBeenCalledTimes(4);
  });
});

但是,我遇到两个问题。首先,我得到了

  

测试运行一秒钟后,Jest没有退出。

     

这通常意味着您的测试中没有停止异步操作。考虑使用--detectOpenHandles运行Jest来解决此问题

但是使用--detectOpenHandles不会显示如何解决此问题。

第二,由于Webhook是异步触发的,因此我如何确保捕获所有这些消息或等待一段时间以使其超时。

0 个答案:

没有答案