Пресеты архитектурного тестирования в Pest 3

Узнайте, как 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 проекте. Ваше будущее (и ваша команда) поблагодарит за чистую, последовательную и безопасную кодовую базу!

Счастливого тестирования, и пусть сборки всегда будут зелёными!

Дополнительные материалы

Предыдущая Статья

Что нового в Pest 3 и как его обновить

Следующая Статья

Валидация (безопасных) URL-адресов