Пресеты архитектурного тестирования в Pest 3
Введение
Если вы похожи на меня, то всегда ищете способы улучшить качество и сопровождаемость кода. Написание архитектурных тестов с Pest 2 — один из способов сделать это. Но теперь, благодаря пресетам архитектурного тестирования в Pest 3, это можно сделать без особых усилий.
Если нужно, узнайте, как начать работу с новой версией Pest.
Что такое пресеты архитектурного тестирования
Пресеты архитектурного тестирования в Pest 3 — это предварительно настроенные наборы правил, помогающие обеспечить соблюдение лучших практик и структурной целостности кодовой базы. Они похожи на бдительного ревизора кода, встроенного прямо в набор тестов. Но это происходит мгновенно и занимает всего несколько секунд!
Pest 3 поставляется с несколькими пресетами в комплекте:
LaravelPHPRelaxedSecurityStrict
Давайте разберёмся, что каждый из этих пресетов предлагает.
Пресет Laravel: Лучший друг Laravel проекта
Пресет Laravel создан для приложений Laravel. Он содержит множество правил, обеспечивающих соответствие кода лучшим практикам и соглашениям Laravel. Вот примерный список того, что он делает:
- Следит, что модели расширяют
Illuminate\Database\Eloquent\Modelи не содержат суффикса 'Model'. - Проверяет, что запросы формы расширяют
Illuminate\Foundation\Http\FormRequestи содержат методrules. - Проверяет, что команды расширяют
Illuminate\Console\Command, содержат методhandleи заканчиваются на 'Command'. - Следит, чтобы почтовые классы расширяли
Illuminate\Mail\Mailableи реализовывалиIlluminate\Contracts\Queue\ShouldQueue. - Проверяет, что контроллеры содержат только определённые публичные методы (например,
index,show,createи т.д.). - Предотвращает использование в коде таких отладочных функций, как
dd,ddd,envиray.
И это ещё только начало! Это как если бы сам Тейлор Отвелл проверял структуру вашего кода 🤣!
Для использования пресета Laravel в тестах просто добавьте:
arch()->preset()->laravel();При необходимости можно исключить определённые пространства имён:
arch()->preset()->laravel()->excluding('App\Exceptions');Пресет PHP: Для остальных проектов
Пресет PHP направлен на поддержание чистого, профессионального PHP кода. Он сосредоточен на предотвращении использования устаревших или потенциально опасных PHP функций. Вот как это выглядит в действии:
- Блокирует использование таких отладочных функций, как
var_dump,print_rиdebug_backtrace. - Предотвращает использование старых функций MySQL (помните, мы все теперь используем PDO или mysqli, верно?).
- Не позволяет использовать
echoиprint(потому что мы возвращаем представления, а не выводим HTML, как в 2005 году). - Запрещает использование функции
goto(мы не в 80-х пишем на BASIC). - Предотвращает использование функций Xdebug в продакшн-коде.
Чтобы применить пресет PHP в тестах, используйте:
arch()->preset()->php();Пресет Relaxed: Когда нужно немного гибкости
Иногда требуется немного больше гибкости в архитектуре. И если бы это зависело от меня, я бы сказал, что нужно соблюдать правила! И тут на помощь приходит пресет Relaxed. Это самый мягкий из всех пресетов:
- Позволяет использовать нестрогие типы.
- Разрешает не финальные классы (наследование для всех!).
- Позволяет использовать публичные и защищённые методы (никакой политики приватных методов).
Он идеально подходит для проектов, в которых требуется немного больше свободы действий, или для работы с устаревшим/легаси кодом, для которого пока нет возможности провести рефакторинг.
Чтобы использовать пресет Relaxed, добавьте следующее в файл теста:
arch()->preset()->relaxed();Пресет Security: Телохранитель кода
Пресет Security предназначен для обеспечения безопасности и сохранности кода.
- Предотвращает использование слабых криптографических функций, таких как
md5иsha1. - Блокирует использование потенциально опасных функций
eval,execиshell_exec. - Запрещает использование
unserialize. - Запрещает использовать
extractдля передаваемых пользователем данных (никакого загрязнения переменных!). - Предотвращает использование
assertв продакшн-коде.
Чтобы обеспечить соблюдение этих правил безопасности, используйте:
arch()->preset()->security();Пресет Strict: Для безумцев
И последний, но не менее важный, пресет Strict. Он предназначен для разработчиков, предпочитающих, чтобы их код выглядел как строгий аудитор налоговой службы.
- Обеспечивает использование строгих типов.
- Требует, чтобы все классы были конечными.
- Запрещает использование защищённых методов (если нравится думать, что есть только чёрное или белое).
- Запрещает использование функций
sleepиusleep.
Чтобы применить этот строгий набор правил, используйте:
arch()->preset()->strict();Завершение
Пресеты архитектурного тестирования в Pest 3 — это революционное решение для поддержания качества и согласованности кода. Они похожи на команду экспертов-рецензентов, постоянно проверяющих структуру и практику работы с кодом.
Работаете ли над проектом Laravel, нуждаетесь ли в соблюдении строгих стандартов безопасности или просто хотите, чтобы PHP код был чистым и современным, — для вас найдётся подходящий пресет.
Так что попробуйте эти пресеты в следующем Pest 3 проекте. Ваше будущее (и ваша команда) поблагодарит за чистую, последовательную и безопасную кодовую базу!
Счастливого тестирования, и пусть сборки всегда будут зелёными!