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