Тестирование промежуточного программного обеспечения express с Jest - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь проверить свой контроллер (express middleware) с помощью Jest. Чтобы объяснить мою проблему, я предоставлю свой код:

import request from 'utils/request';
import logger from 'config/logger';

const get = async (req, res, next) => {
  try {
    const response = await request.get('entries?content_type=category');
    return res.json(response.data);
  } catch (error) {
    logger.error(error.response.data.message);
    return next(error);
  }
};

module.exports = {
  get,
};

Мне нужно протестировать эту функцию get. Для этого мне нужно предоставить аргументы req, res и next. Я нашел этот вопрос , где опера говорит о насмешке над запросом express, а затем говорит "как его использовать", но я не понимаю, как. Это единственная топика c, которую я до сих пор видел непосредственно связанной с моей проблемой, но ответ не работает для меня (я не хочу использовать Nock или любую другую библиотеку для проведения тестирования, только Jest).

Итак, как мне успешно протестировать эту функцию? Это с помощью насмешек или есть какой-то другой способ?

Извините за мой плохой английский sh и заранее спасибо за вашу помощь!

1 Ответ

1 голос
/ 17 марта 2020

Если вы пишете юнит-тесты, то более подходящим способом является go. используя Jest, Mocking должен быть доступен из коробки. В тестовом файле это может выглядеть примерно так:

import request from 'utils/request';
import logger from 'config/logger';
import { get } from 'middleware/get'; // Or whatever file you are testing

jest.mock('request'); // Mocking for a module import
jest.mock('logger'); // Mocking for a module import

const mockReq = () => {
  const req = {};
  // ...from here assign what properties you need on a req to test with
  return req;
};

const mockRes = () => {
    const res = {};
    res.status = jest.fn().mockReturnValue(res);
    res.json = jest.fn().mockReturnValue(res);
    return res;
};

test('should return a json response of data', () => {
    const mockedNext = jest.fn();
    const mockedReq = mockReq();
    const mockedRes = mockRes();
    const mockedEntries = {
        data: {}
    };/*...whatever mocked response you want back from your request*/
    request.get.mockResolvedValue(mockedEntries);

    const result = get(mockedReq, mockedRes, mockedNext);

    expect(result).to.equal(mockedEntires.data);
    expect(mockedNext.mock.calls.length).toBe(1);
    expect(mockedRest.json).toHaveBeenCalledWith(mockedRes.data)
});

Jest Mocking

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