Статья объясняет проблему при тестировании Laravel-приложений: если в тестах не используется трейт
RefreshDatabase, данные, созданные в БД (через фабрики, сидеры или HTTP-запросы), могут сохраняться между тестами и вызывать случайные ошибки при последующих запусках.Автор показывает, как это предотвратить:
🔸 можно добавить
RefreshDatabase глобально для всех feature-тестов через tests/Pest.php;🔸 можно искать тесты без этого трейта с помощью
grep, например:grep -rL 'RefreshDatabase' tests/Feature | xargs grep -l '::factory('— эта команда находит тесты, где нет трейта, но есть использование фабрик.
🔸можно расширить поиск и даже встроить такую проверку в GitHub Actions, чтобы CI падал, если в PR есть тесты без трейта, но с операциями, изменяющими БД.
В конце совет:
🔹 всегда использовать
RefreshDatabase, так как он быстрее и безопаснее других способов очистки БД;🔹 предпочитать фабрики и сидеры ручному созданию моделей;
🔹 проверять, что HTTP-тесты, создающие записи, также используют этот трейт.
🔗 Читать статью
Библиотека пхпшника