Я пытался интегрировать Jest и Supertest для создания интеграционных тестов на некотором промежуточном программном обеспечении.
Я генерировал свои функции промежуточного программного обеспечения динамически, поскольку они изменяли маршрут к маршруту, и выглядело так:
export function middleware1(param: paramType) {
return async (req: Request, res: Response, next: NextFunction) => {
...
};
}
В моих тестах Jest в верхней части файла я смоделировал middleware1 следующим образом:
jest.mock('../middleware_path', () => ({
middleware1: jest.fn(
_ => {
return (req, res, next) => {
return new Promise((resolve, reject) => {
console.log('Hello World');
resolve(next());
});
};
}),
}));
import * as middlewareUtils from 'middleware'
// This next line is necessary for TypeScript compilation
const mockedMiddlewareUtils = mocked(middlewareUtils);
Когда я вызываю эту функцию с помощью supertest, чтобы поразить мой API, она определенно использует эту ложную реализацию. Это печатает привет мир и все! Однако, когда я expect(mockedMiddlewareUtils.middleware1).toHaveBeenCalled();
в своем заявлении it, это терпит неудачу. Когда я запускаю middlewareUtils.middleware1
независимо от вызова API, ожидание разрешается правильно. Почему макет неправильно интерпретирует вызов функции?