Порядок выполнения функций в Express перепутан с тестами - PullRequest
0 голосов
/ 27 марта 2020

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

1 Ответ

0 голосов
/ 27 марта 2020

Оказывается, это потому, что Express выполняет функцию генерации промежуточного программного обеспечения во время создания приложения. Это результирующая функция, которая постоянно вызывается в приложении. Генерирующая функция вызывается один раз, ее результат вызывается много раз.

Вам нужно смоделировать функцию, которую ваша функция генерации промежуточного программного обеспечения производит (т.е. результат middleware1), а не сама производящая функция.

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