TGViewer
QA Family by Alexey QA Family by Alexey @dev_qa · 1.63K subscribers
Post #208 896
🟢Что такое юнит тест? 🧩

🔎 Юнит тест — это тест, который проверяет правильность работы небольшого фрагмента кода (юнита).

🚩Особенности юнит тестов
1️⃣. Проверка небольших фрагментов кода.
2️⃣. Быстрая проверка.
3️⃣. Изоляция от остального кода.

🔍 Способы изоляции кода в юнит тестах
Тесты можно разделить на две школы по способу изоляции кода:
🔵Детройтская школа (классический подход)
🔵Лондонская школа

📘 Классический подход:
☑️Юнит тесты проверяют код с минимальной изоляцией.
☑️Интеграция с реальными зависимостями.

🎓 Лондонская школа:
☑️Сильная изоляция кода.
☑️Использование заглушек и моков для имитации зависимостей.


⚖️ Разница в подходах
🔵 Классический подход: Реальные зависимости, меньше моков.
🔵 Лондонская школа: Полная изоляция, много моков и заглушек.


💻 Примеры кода
Тестируемый код

// orderService.js
class OrderService {
constructor(paymentService) {
this.paymentService = paymentService;
}

placeOrder(order) {
if (this.paymentService.processPayment(order)) {
return 'Order placed';
} else {
return 'Payment failed';
}
}
}

// paymentService.js
class PaymentService {
processPayment(order) {
// Логика обработки платежа
return true; // Или false в случае ошибки
}
}


Классический подход 📘

test('placeOrder returns "Order placed" when payment is successful', () => {
const paymentService = new PaymentService();
const orderService = new OrderService(paymentService);
const order = { amount: 100 };

const result = orderService.placeOrder(order);

expect(result).toBe('Order placed');
});


Лондонская школа
🎓
test('placeOrder returns "Order placed" when payment is successful', () => {
const paymentService = { processPayment: jest.fn().mockReturnValue(true) };
const orderService = new OrderService(paymentService);
const order = { amount: 100 };

const result = orderService.placeOrder(order);

expect(result).toBe('Order placed');
expect(paymentService.processPayment).toHaveBeenCalledWith(order);
});


💡Вывод:
Выбор подхода зависит от конкретного проекта и предпочтений команды.

Теги: #unitTests #testing #cleanСode
  • 👎 63
  • 👍 8
  • ❤ 3
More from @dev_qa
  1. Sep 23, 2026Следующий спикер митапа Moscow QA #28 x Черный митап +18 Даниил Ахетов с докладом Как я де…
  2. Sep 23, 2026Приходите будет еще Боря, Костя и Саша из PiterQA Все топовые спикеры которые расскажут ве…
  3. Sep 5, 2026Ссылка на трансляцию митапа Moscow QA#27 x Мир Plat.Form: https://vkvideo.ru/video-2052808…
  4. Sep 5, 2026Vitest 5.0 вышел ➖ trace view в Browser Mode: упавший браузерный тест проигрывается по шаг…
  5. Sep 1, 2026Playwright MCP 0.0.80 добавлены инструменты browser_start_recording / browser_stop_recordi…
  6. Aug 26, 2026Post #339
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →