Безпека й конфіденційність
Загальні принципи
Section titled “Загальні принципи”- Повна ізоляція
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' }); - Не копіювати продакшн-структури даних або дампи- навіть частково.
- Використовуються функції-генератори (factory/builder), що створюють умовні дані:
- Не читаємо реальне середовище
- Заборонено звертатися до
process.envдля отримання налаштувань продакшну або dev-оточення. - Якщо модуль очікує змінні середовища, у тесті їх задаємо явно:
vi.stubEnv('APP_MODE', 'test');
- Заборонено звертатися до
- Без побічних ефектів
- Тести не змінюють системний час, локаль чи глобальні об’єкти без скидання (
afterEach→vi.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) з повним тілом JWT | console.log('Response OK') або маскування |
| Снапшот із повним JSON користувача | Тестування лише бізнес-поведінки: expect(user.name).toBeDefined() |