Раздел 15 · Общие IT-компетенции

База джуна: REST, юнит-тесты, терминал и отладка

junior~30 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

База джуна: REST, юнит-тесты, терминал и отладка

Есть навыки, которые не привязаны ни к языку, ни к фреймворку. Сменишь React на Vue, Node на Go, а они останутся: понять чужой API, написать тест, не потеряться в терминале, найти баг быстрее чем за день. Этот урок собирает четыре таких навыка в один базовый набор. Каждый из них дальше раскрывается в своём разделе курса, здесь смотрим на всю поляну сразу.

REST концептуально

Когда два сервиса разговаривают по HTTP, есть два способа думать об этом разговоре. RPC мыслит глаголами: «вызови функцию createUser». REST мыслит существительными: «вот ресурс /users, сделай ему POST».

Разница не косметическая. В REST у тебя ограниченный набор глаголов (GET, POST, PUT, PATCH, DELETE) и бесконечный набор существительных. Это даёт предсказуемость: увидев DELETE /orders/42, ты знаешь, что произойдёт, не открывая документацию. В RPC каждый метод уникален, и без документации ты слеп.

RPC-стиль:   POST /api/createOrder
             POST /api/cancelOrder
             POST /api/getOrderById

REST-стиль:  POST   /orders        создать
             DELETE /orders/42     отменить
             GET    /orders/42     прочитать

На практике почти никто не делает «чистый» REST по диссертации Филдинга, и это нормально. Важно понимать спектр: от «HTTP как транспорт для вызовов» до «ресурсы, методы, коды ответов, ссылки». Подробный разбор проектирования с пагинацией, версионированием и кодами ошибок ждёт тебя в уроке REST: проектирование API.

Юнит-тесты: AAA и пирамида

Цель тестирования не «покрытие 80 процентов», а уверенность: можно менять код и быстро узнавать, что ничего не сломалось. Юнит-тест это самый дешёвый способ такую уверенность получить.

Скелет любого юнит-теста описывается тремя буквами AAA:

test('скидка 10 процентов для заказа от 1000', () => {
  // Arrange: подготовка
  const order = makeOrder({ total: 1500 });

  // Act: одно действие
  const discounted = applyDiscount(order);

  // Assert: проверка результата
  expect(discounted.total).toBe(1350);
});

Подготовка данных это половина искусства. Фабрики вроде makeOrder прячут нерелевантные детали и оставляют на виду только то, что важно для конкретного теста. Если в тесте двадцать строк настройки и одна проверка, тест врёт о том, что он проверяет.

Code coverage полезен как термометр, но не как цель. Сто процентов покрытия с проверками expect(result).toBeDefined() хуже, чем семьдесят с осмысленными ассертами.

Пирамида тестирования отвечает на вопрос «сколько каких тестов писать»: много быстрых юнитов в основании, меньше интеграционных в середине, несколько E2E на вершине. Почему именно так и когда пирамида превращается в «трофей», разобрано в уроке Пирамида, трофей и сдвиг эпохи ИИ, а полная анатомия юнит-теста в Анатомия юнит-теста.

дальше после входа

Урок целиком открыт всем, кто вошёл. Войди по своему email, чтобы читать дальше.

Вход пока по приглашению. Если хочешь учиться, напиши Vassiliy.