Тестирование асинхронного кода в блоке catch с использованием Nock или httpMock - PullRequest
0 голосов
/ 02 октября 2018

Я сделал запрос axios, который завершается неудачно и выдает ошибку в блоке catch.В блоке catch я делаю запрос к другой конечной точке, чтобы получить результаты

router.get('/info', (req, res) => {
  axios('www.getInformationApi.com')
    .then(results => {
      return res.status(200).json(results.data);
    })
    .catch(async(err) => {

      if (err === 'server_down') {
        try {
          // need to improve test coverage for this lines
          const secondsResults = await axios('www.getInformationApi2.com');
          return res.status(200).json(secondsResults)
        } catch (error) {
          throw Error(error)
        }
      } else {
        const error = errors.createEntError(err.message, errorList);
        return res.status(constants.HTTP_SERVER_ERROR).json(error);
      }


    })

});

Мне нравится писать модульный тест, охватывающий запрос "Axios" в блоке catch с использованием "nock" или "http-mocks"

Могу ли япроверить с помощью модульного теста или мне нужно запустить интеграционные тесты в этом сценарии

1 Ответ

0 голосов
/ 02 октября 2018

Согласно ответу о хорошо единица тест , есть утверждение, что:

Не проверяйте код, который вам не принадлежит

Итак, если вы используете nock или http-mocks , ваш тест также зависит от библиотеки axios .Потому что, если у axios есть ошибка - ваш тест может показать ее.Таким образом, с моей точки зрения, правильнее пометить его как интеграция тест тогда.

Хороший юнит-тест должен быть независимым , а что получится - библиотека axios должна быть заглушен , с поведением, которое вы хотите проверить, то есть:

sinon.stub(axios, 'get').rejects('server_down')
...