Задать вопрос
@mmxdesign
Software Engineer

Как тестировать код который имеет зависимость от внешних функций и библиотек?

Стоит задача написать unit test и покрыть максимально внутрению библиотеку которую написали предудущие програмисты. Данная библиотека завязана на других внешних библиотека.
Почти каждая функция имеет зависимость от приватных или внешних функций... а задача стоит покрыть почти 90% кода.
Пользуюсь Jasmine, Karma, Istanbul.
Если начинаю делать mock или spy функции, либо тест не покрывает ту линию, либо происходит closure и функция замыкает то значение и мок игнорируется....(
Буду благодарен комментам и идеям у кого был опыт в написание кода для своих внутренних библиотек.

function internalFoo1(input) {
 var result = internalFoo2(input*2);
 var finalResult = externalLibraryBar1(result);
 return result;
};

function internalFoo2(value) {
  var operation = externalLibraryBar2(value*2);
  var response = externalLibraryBar3(operation);
  return response;
}


Например как написать юнит-тест для функции InternalFoo1, чтобы также покрыть тестом InternalFoo2.
Знаю что юнит-тесты не для этого предназначены и в идеале хорошо когда каждая функция выполняет свою задачу без какой либо зависимости или получает их явно через аргументы и тд...
Нам юнит тесты нужны для того чтобы при continous integration тесты покрывали хотябы 80% кода...
  • Вопрос задан
  • 252 просмотра
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
idelg
@idelg
Разработчик
Думаю, разработчики видят ваш вопрос и думают «Не любой код можно и нужно тестировать». Я копну немного глубже. Рекомендую подумать сначала о пользе. В чём ценность высокого покрытия в CI?

Если вы хотите высокое покрытие, чтобы повысить стабильность системы, то нужно принять факт, что в текущей реализации код нетестируем и необходимо отрефакторить его, избавив от неявных зависимостей и разбив на атомарные модули. Реалистично оцените сроки такого мероприятия и ещё раз подумайте о пользе.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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