Задать вопрос
Meehalkoff
@Meehalkoff

Как протестировать middleware?

Приветствую.

Есть такая middleware
import cors, { CorsOptions } from 'cors';
import { HttpConfig } from '../configurations/Http';
import { Middleware } from '../interfaces/express';

const corsOptions: CorsOptions = {
  origin: HttpConfig.DOMAIN,
};

export const CORS: Middleware = cors(corsOptions);


Хочу с помощью jest протестировать.

Гуглил. Наткнулся на статью

Но не совсем понимаю, как это использовать.

Тестовые ситуации вижу такие:
- Access-Control-Allow-Origin установлен
- NextFunction вызвана

Прошу объяснить, как это правильно тестировать и как написать сам тест.

Я попробовал так:
import { Request, Response, NextFunction } from 'express';
import { CORS } from './Cors';

describe('CORS middleware', () => {
  let mockRequest: Partial<Request>;
  let mockResponse: Partial<Response>;
  const nextFunction: NextFunction = jest.fn();

  test('with "CORS" header', async () => {
    mockRequest = {
      headers: {
        host: 'http://localhost:1987',
      },
    };
    mockResponse = {
      setHeader: jest.fn(),
      send: jest.fn(),
    };

    CORS(mockRequest as Request, mockResponse as Response, nextFunction);

    expect(nextFunction).toBeCalledTimes(1);
  });
});

Но:
● CORS middleware › with "CORS" header

    TypeError: res argument is required

      at vary (node_modules/vary/index.js:136:11)
      at applyHeaders (node_modules/cors/lib/index.js:151:11)
      at applyHeaders (node_modules/cors/lib/index.js:149:11)
      at applyHeaders (node_modules/cors/lib/index.js:149:11)
      at cors (node_modules/cors/lib/index.js:187:7)
      at node_modules/cors/lib/index.js:224:17
      at originCallback (node_modules/cors/lib/index.js:214:15)
      at node_modules/cors/lib/index.js:219:13
      at optionsCallback (node_modules/cors/lib/index.js:199:9)
      at corsMiddleware (node_modules/cors/lib/index.js:204:7)
  • Вопрос задан
  • 291 просмотр
Подписаться 3 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы