У Pest v4.5.0 з’явилася вбудована підтримка повторного запуску нестабільних тестів за допомогою нового модифікатора flaky() та CLI-флага --flaky. Оновлення також включає нову архітектурну перевірку для виявлення розбіжностей у регістрі шляхів до файлів, фільтр покриття --only-covered та низку інших покращень.
- Модифікатор
flaky()із можливістю налаштування кількості спроб - CLI-опція
--flakyдля запуску лише позначених як нестабільні тестів - Архітектурна перевірка
toBeCasedCorrectly - Опція
--only-coveredдля звіту про покриття коду - Виправлення помилок у роботі з datasets, traits та паралельним тестуванням
# Що нового
# Модифікатор flaky() та опція --flaky
Тести, що час від часу падають через затримки, зовнішні залежності або інші недетерміновані умови, тепер можна позначити методом ->flaky(). Якщо такий тест провалюється, Pest автоматично перезапускає його вказану кількість разів, перш ніж зафіксувати помилку. За замовчуванням кількість спроб дорівнює 3.
it('sends an email notification', function () {
// ...
})->flaky();
it('resolves within the timeout', function () {
// ...
})->flaky(tries: 5);
Новий флаг --flaky дозволяє запускати лише ті тести, що позначені як нестабільні. Це спрощує їх ізольоване налагодження:
vendor/bin/pest --flaky
Хуки життєвого циклу, як-от beforeEach та afterEach, виконуються перед кожною спробою, що гарантує коректне скидання стану тесту.
# Архітектурна перевірка toBeCasedCorrectly
Метод ->toBeCasedCorrectly() додано до набору архітектурних перевірок Pest. Він порівнює namespace кожного класу з фактичним шляхом до файлу та сигналізує про розбіжності в регістрі символів. Оскільки macOS та Windows зазвичай нечутливі до регістру, такі помилки часто непомітні під час розробки, проте вони спричиняють збої після деплою на Linux-сервери.
arch()
->expect('App')
->toBeCasedCorrectly();
Наприклад, ця перевірка виявить помилку, якщо клас за шляхом app/Providers/AppServiceProvider.php має namespace App\providers\AppServiceProvider.
PR: #1455, автор @SimonBroekaert
# Опція --only-covered для звіту про покриття
Флаг --coverage отримав доповнення --only-covered, яке приховує зі звіту всі файли з 0% покриття. Це зручно під час роботи над великими проєктами, коли потрібно зосередитися саме на тих файлах, які охоплюють ваші нові тести.
vendor/bin/pest --coverage --only-covered
Ця опція не впливає на розрахунки порогів --min або --exact — вони й надалі враховуватимуть усі файли проєкту.
PR: #1626, автор @SimonBroekaert
# Виправлення помилок
- Оновлено
toUseTraitдля розпізнавання трейтів, успадкованих від батьківських класів або через вкладені трейти (#1515). - Виправлено відсутність класів перед
toExtendу пресеті Laravel (#1569). - До пресету Laravel додано класи "Rules" (#1580).
- Виправлено обробку аргументів
--parallelта--teamcityдля ParaTest (#1615). - Виправлено виявлення вкладених datasets та звітування про некоректні дані в паралельному режимі (#1655).
- Виправлено збереження Unicode-символів в іменах файлів при використанні
--filter(#1624). - Виправлено роботу іменованих параметрів у datasets (#1634).
- Виправлено анотації типів
thisдля замикань параметрів у функціях (#1628). - Виправлено успадкування datasets при використанні ланцюжків методів
beforeEach()->with()таdescribe()->with()(#1565).