Тестування
Цей розділ містить стратегії перевірки та тестування, процеси та тестові сторінки, які використовуються для тестування вебсайту та розгортання живих перевірок.
Цей розділ знаходиться в стадії розробки.
Категорії тестів
Тестові скрипти в package.json згруповані за домовленостями іменування, які також керують їх автоматичним виявленням:
test:baseвиконує основні перевірки (еквівалентноcheck). У CI вони покриваються окремими робочими процесами перевірки, а не єдиним завданням.- Складені скрипти
test:<слово>-<слово>автоматично виявляються та виконуються разом за допомогоюtest:compound-tests(а отже, іtest:all). Присвоєння скрипту складеної назви — це спосіб включити його до цієї групи, навіть якщо в іншому випадку це самостійна перевірка (наприкладtest:local-tools). test:publicвиконує перевірки вtests/public/(будь-які*.test.mjsтам). Вони читають зібраний сайтpublic/, тому потребують попередньогоnpm run buildі пропускаються, колиpublic/відсутній. Додайте перевірку, помістивши*.test.mjsу цю теку; дотримуйтесь конвенції пропуску, колиpublic/відсутній. Вони навмисно виключені зtest:compound-tests(який не виконує збірку) і натомість запускаються в CI у завданні, яке використовує поточний артефакт збірки.- Скрипти
test:*:live— це опціональні перевірки проти розгорнутого, живого сайту.
Тестові твердження
Мета
Коли тест завершується невдало, у вихідних даних має бути чітко видно, що саме перевірялося, а також має бути показано чітке порівняння фактичних і очікуваних значень, без довгих рукописних повідомлень.
Наприклад, уникайте:
assert.ok(a === b, `expected ${a} to be ${b}`);
Натомість використовуйте:
assert.strictEqual(status, expectedStatus, 'HTTP status');
Настанови
Пункти нижче використовують вбудований механізм node:test та API assert Node, оскільки саме їх використовують кілька наших тестових наборів. Ті самі ідеї застосовуються в інших тестових фреймворках: віддавайте перевагу твердженням, які дають чіткі відмінності, тримайте контекст помилок коротким і конкретним, і виділяйте спільні допоміжні функції, коли одна й та сама перевірка повторюється.
- Віддавайте перевагу
assert.strictEqualзамістьassert.equalдля перевірок примітивів, де важлива строгість і якість відмінностей. - Додавайте короткий третій аргумент як контекст, наприклад
HTTP status,Content-Type,Location,Request body. - Використовуйте
assert.match, коли регулярний вираз може чіткіше передати намір, ніжincludesабо ланцюжокokлогіки. - Розміщуйте спільні допоміжні функції тверджень у модулі, який імпортується тестовими наборами, що їх використовують, розташованими поруч із цими тестами, замість копіювання по файлах. Інші невеликі, лише для тестування утиліти можуть жити в тому ж модулі, коли він залишається сфокусованим (наприклад
assertVaryIncludesAcceptуnetlify/edge-functions/lib/test-helpers.ts).