Они говорят:
«Вы должны протестировать интерфейс, а не реализацию.»
Другими словами, вас должен интересовать конечный результат, а нес тем, как это делается ( тестирование черного ящика ).
Также сказано, что вы должны не тестировать частные функции , а толькооткрытый интерфейс, который выставлен.Но мой вопрос ...
Что вы делаете с общедоступным интерфейсом (например, функцией), который зависит от нескольких подзадач, которые являются частными?Как вам следует протестировать это?
Рассмотрим приведенную ниже функцию calculateDiscountedPrice
. Давайте представим, что первая функция общедоступна (например, экспорт по умолчанию), а остальные 3 являются частными.
// PUBLIC TOP-LEVEL FUNCTION
export default function calculateDiscountedPrice(price, discount) {
const dollarsOff = getDollarsOff(price, discount);
return round(price - dollarsOff);
}
// PRIVATE SUBTASK
function getDollarsOff(price, discount) {
return price * discount;
}
// PRIVATE SUBTASK
function round(number, precision = 2) {
return isInt(number)
? number
: number.toFixed(precision);
}
// PRIVATE SUBTASK
function isInt(number) {
return number % 1 === 0;
}
Пример использования:
console.log(calculateDiscountedPrice(100, 0.75)) // 25
Как выКак видите, calculateDiscountedPrice
- это публичная функция, которую мы выставляем, поэтому мы должны протестировать ее.Но как насчет трех других подзадач?Почему бы нам не проверить это?Будут ли тесты, которые охватывают calculateDiscountedPrice
, охватывать и другие три?