Пресеты архитектурного тестирования в Pest 3
Введение
Если вы похожи на меня, то всегда ищете способы улучшить качество и сопровождаемость кода. Написание архитектурных тестов с Pest 2 — один из способов сделать это. Но теперь, благодаря пресетам архитектурного тестирования в Pest 3, это можно сделать без особых усилий.
Если нужно, узнайте, как начать работу с новой версией Pest.
Что такое пресеты архитектурного тестирования
Пресеты архитектурного тестирования в Pest 3 — это предварительно настроенные наборы правил, помогающие обеспечить соблюдение лучших практик и структурной целостности кодовой базы. Они похожи на бдительного ревизора кода, встроенного прямо в набор тестов. Но это происходит мгновенно и занимает всего несколько секунд!
Pest 3 поставляется с несколькими пресетами в комплекте:
Laravel
PHP
Relaxed
Security
Strict
Давайте разберёмся, что каждый из этих пресетов предлагает.
Пресет 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 проекте. Ваше будущее (и ваша команда) поблагодарит за чистую, последовательную и безопасную кодовую базу!
Счастливого тестирования, и пусть сборки всегда будут зелёными!