Технически, express.Application
не может быть подделано, это интерфейс.Это объект, который он представляет, который должен быть смоделирован.
Как указано в jest.mock
документации , он
Возвращает объект jest для создания цепочки.
Так что это неправильный способ получения смоделированного объекта:
const expressMock = jest.mock("express");
Правильный будет
jest.mock("express");
...
const expressMock = require("express");
Более того, App
принимает не express
фабричная функция, но объект приложения, который является результатом вызова express()
.
jest.mock
без фабричной функции приводит к автоматически смоделированной express
фабрике, которая не выдаст нужный объект приложения.
Поскольку expressMock
передается App
непосредственно в тестах, нет необходимости имитировать модуль Express.Вместо этого можно передать макет, содержащий минимальную реализацию:
const expressMock = {
use: jest.fn(),
...
} as any as express.Application;
let app = new App(expressMock);