Виды тестов и что прячет coverage
Сцена · лестница уверенности
Представь лестницу. На нижней ступени дешёвый тест: проверил чистую функцию, ответ за миллисекунду. На верхней дорогой: запустил весь продукт, прокликал сценарий как живой пользователь. Чем выше ступень, тем ближе тест к реальности и тем он медленнее, хрупче, дороже в поддержке.
Виды тестов это и есть ступени этой лестницы. А coverage это прибор, который меряет, сколько кода ты прошёл. Прибор полезный, но у него есть слепая зона, и сегодня мы её увидим своими глазами.
Карта урока · что заберёшь
- разложишь тесты по видам и поймёшь ось “стоимость против уверенности”;
- узнаешь, что считают line, branch, function и statement coverage;
- увидишь функцию со стопроцентным покрытием и непойманным багом;
- включишь coverage на домене Kassa и найдёшь первую обманчиво зелёную строку.
Раздел 1 · виды тестов
Идея словами
Три основных вида различаются по одному признаку: сколько настоящего в тесте.
- Unit проверяет одну единицу логики в изоляции. Всё внешнее подменено или его просто нет. Чистая функция это идеальный кандидат: ни сети, ни БД, ни времени.
- Integration проверяет, что несколько настоящих кусков работают вместе: реальный SQL против реальной БД, обработчик HTTP против реального роутера. Браузера нет, но границы внутри системы настоящие.
- E2E (end to end) проходит весь путь как пользователь: браузер, сервер, база. Максимум реальности и максимум цены.
Рядом стоят отдельные оси, не уровни, а приёмы: contract, property, snapshot, mutation. С каждым из них разберёмся в своём уроке.
Картинка · стоимость против уверенности
Покрути ползунки. Добавь сто E2E-тестов и посмотри, как время прогона в CI уходит в минуты, а уверенность растёт еле-еле. Потом убери их и добавь юнитов: дёшево, быстро, но “всё ли склеено” по-прежнему неизвестно. Вывод не “юниты лучше” и не “E2E лучше”, а “у каждого вида своя цена за уверенность, и набор надо балансировать”. К форме баланса вернёмся в уроке про пирамиду и трофей.
Что взять с собой
- вид теста определяется числом настоящих зависимостей в игре;
- выше по лестнице: дороже, медленнее, ближе к пользователю;
- contract, property, snapshot, mutation это оси, а не ступени.
дальше после входа
Урок целиком открыт всем, кто вошёл. Войди по своему email, чтобы читать дальше.
Вход пока по приглашению. Если хочешь учиться, напиши Vassiliy.