Как написать интеграционный тест с Jest и Express? - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь написать интеграционные тесты с микросервисом стороннего производителя (предположим, это вызов 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 не вышел из системы через секунду после завершения тестового прогона.

Обычно это означает, что существуют асинхронные операции, которые не были остановлены в ваших тестах. Рассмотрите возможность запуска Jest с --detectOpenHandles для устранения этой проблемы

, но использование --detectOpenHandles не показывает, как устранить эту проблему.

Во-вторых, поскольку веб-крюк сработал асинхронно, как я могу убедиться, что все они перехвачены или ожидают некоторого времени ожидания?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...