Тестирование асинхронного кода в блоке catch с использованием Nock или httpMock
Я сделал запрос 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 ответ
Согласно ответу о хорошем модульном тесте, есть утверждение, что:
Не проверяйте код, который вам не принадлежит
Так что, если вы используете nock или http-mocks, ваш тест также зависит от библиотеки axios. Потому что, если у axios есть ошибка - ваш тест может показать ее. Так что, на мой взгляд, правильнее было бы отметить это как интеграционный тест.
Хороший модульный тест должен быть независимым, а что нужно - библиотека Axios должна быть заглушена, с поведением, которое вы хотите протестировать, то есть:
sinon.stub(axios, 'get').rejects('server_down')