Как я могу издеваться над Typescript объектами Express Request, Response и NextFunction - PullRequest
0 голосов
/ 02 марта 2019

Это мое промежуточное ПО:

export const isLogged = () => (req: Request, res: Response, next: NextFunction) => next();

Я пытаюсь создать модульный тест, но не могу поиздеваться с правильными типами:

const middleware = middlewares.isLogged()

middleware(
  jest.fn<Request>(), // Expected 0-2 type argument but got 1
  jest.fn<Response>(),
  jest.fn<NextFunction>(),
);

Это неработая, я пытался издеваться над модулем express и тому подобным, но не заставил его работать.Как я могу издеваться над ними?

1 Ответ

0 голосов
/ 12 марта 2019

Первые два аргумента - это объект Request и объект Response.

Так как ваш код не использует req или res, вы можете просто передать пустые объекты как фиктивные и сообщитьВведите TypeScript для обработки макетов как ожидаемых типов, используя as:

it('should call next', () => {
  const next = jest.fn();
  middleware(
    {} as Request,
    {} as Response,
    next,
  );
  expect(next).toHaveBeenCalled();  // SUCCESS
});

Обновление

Если вы хотите макетировать дополнительные свойства для Request или Response затем вы можете просто добавить их к вашему фиктивному объекту.

Ваш фиктивный объект (вероятно) не будет реализовывать полный интерфейс Request или Response, поэтому вы можете использовать что-то вроде Partial<Request> или Partial<Response> или просто сообщите TypeScript, что вы хотите "отказаться от проверки типов и позволить значениям проходить проверку во время компиляции" , используя тип any для фиктивных объектов:

it('should call next', () => {
  const req: any = {
    get: jest.fn((name) => {
      if (name === 'content-type') return 'text/plain';
    })
  };
  const res: any = {
    send: jest.fn()
  }
  const next = jest.fn();
  middleware(
    req,
    res,
    next,
  );
  expect(next).toHaveBeenCalled();  // SUCCESS
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...