Skip to content

Безпека й конфіденційність

  • Повна ізоляція
    Unit-тести виконуються у контрольованому середовищі без доступу до мережі, файлової системи користувача чи зовнішніх сервісів.

Будь-які виклики, що виходять за межі модуля, який тестується,- мокаються або стабаються.

  • Жодних реальних даних
    Усі приклади вхідних даних- синтетичні або псевдо-реальні.
    Заборонено використовувати:
    • реальні e-mail, імена, телефони, адреси;
    • будь-які токени, API-ключі, cookies, credentials;
    • уривки з реальних продакшн-логів або дампів;
  • Жодних секретів у коді
    • У коді тестів не допускається використання значень із .env, навіть через process.env.*.
    • Якщо змінна потрібна для перевірки логіки- використовуються тестові плейсхолдери, наприклад:
      const API_KEY = 'test_api_key';
    • Будь-яке значення, що схоже на секрет (токен, UUID, пароль), має бути підставним.
  • Безпечне оточення
    • Тести не змінюють глобальні налаштування, не записують файли за межами os.tmpdir().
    • Не використовують реальні директорії проєкту, домашні шляхи чи мережеві порти.
    • Для тимчасових файлів- тільки унікальні каталоги, які очищаються після виконання.
  • Відсутність витоків у логах і снапшотах
    • У тестах не виводяться в консоль секрети, токени чи приватні структури даних.
    • Логи та помилки- короткі, без вмісту внутрішніх полів.
    • Снапшоти не повинні містити ключів, sessionId, шляхів користувача чи інших унікальних ідентифікаторів.
  • Виключно синтетичні фікстури
    • Використовуються функції-генератори (factory/builder), що створюють умовні дані:
      const user = userFactory({ email: 'user+test@example.com' });
    • Не копіювати продакшн-структури даних або дампи- навіть частково.
  • Не читаємо реальне середовище
    • Заборонено звертатися до process.env для отримання налаштувань продакшну або dev-оточення.
    • Якщо модуль очікує змінні середовища, у тесті їх задаємо явно:
      vi.stubEnv('APP_MODE', 'test');
  • Без побічних ефектів
    • Тести не змінюють системний час, локаль чи глобальні об’єкти без скидання (afterEachvi.restoreAllMocks()).
    • Не взаємодіють із мережею, базою даних, чергами тощо.

Приклади «погано» / «добре»

Section titled “Приклади «погано» / «добре»”
❌ Погано✅ Добре
process.env.API_KEY = 'real-prod-key'const API_KEY = 'test_key_placeholder'
Виклик реальної функції fetch('https://api.stratoflow.io')Мок через vi.fn() або підставний хелпер
console.log(response) з повним тілом JWTconsole.log('Response OK') або маскування
Снапшот із повним JSON користувачаТестування лише бізнес-поведінки: expect(user.name).toBeDefined()