Unit-тесты я освоил, но паника была от слова «интеграционный» — будто сложное. Разобрался, когда написал тест, который через Django test client дергает настоящий URL и проверяет страницу целиком (запрос → view → ответ). Это не «магия», а просто проверка большего куска сразу.
Нейтрально: интеграционный тест проверяет, как части работают вместе — маршрут, view, модель. В Django это удобно через self.client.
# tests.py
from django.test import TestCase
from django.urls import reverse
class HabitViewTests(TestCase):
def test_create_habit_via_url(self):
resp = self.client.post(reverse("habits"), {"name": "бег"})
self.assertEqual(resp.status_code, 201)
self.assertEqual(Habit.objects.filter(name="бег").count(), 1)
Когда тест прошёл, ловлю себя на настоящем удовольствии: покрыта не функция в отрыве, а рабочий путь «URL → запись». Больше не боюсь слова «интеграция» — это просто тест связки. И код стал смелее менять: сеть страховки видна.