Модульное тестирование WordPress с помощью Brain Monkey

Кто еще не знаком с тестированием и модульным тестированием можете ознакомится: Автоматизация тестирования, Модульное тестирование с помощью PHPUnit. Тестирование тем и плагинов под WordPress имеет одну большую проблему — взаимодействие с ядром. Решить ее можно с помощью библиотек Brain-WP/BrainMonkey или 10up/WP_Mock. Как писать тесты с помощью 10up/WP_Mock вы можете прочитать в статье: Модульное тестирование WordPress (PHPUnit, WP_Mock), но …

ПодробнееМодульное тестирование WordPress с помощью Brain Monkey

Не за#буйте с вашей пагинацией!!!

Почему не работает пагинация? Один из самых популярных вопрос у разработчиков WordPress Так почему же? Для начала нужно разобраться с тем, на какой странице вы хотите вывести пагинацию. Существуют страницы постов (постов/страниц/кастомных типов постов(CPT)) или архивные страницы(архивные/терминов страницы и страница поиска). Пагинация на странице постов В целом пагинацию можно разбить на 3 небольших этапа: Делаем …

ПодробнееНе за#буйте с вашей пагинацией!!!

Как с помощью husky улучшить качество работы с Git?

Библиотека husky может предотвращать плохие git commit, git push и еще что-то) Установка husky npm install husky —save-dev В package.json добавим секцию scripts в которой создадим команду для проверки WPCS: { … «scripts»: { «cs»: «vendor/bin/phpcs —standard=WordPress .» }, … } Добавим саму библиотеку WPCS: composer require —dev wp-coding-standards/wpcs Добавим секцию husky в package.json: { … …

ПодробнееКак с помощью husky улучшить качество работы с Git?

Подмена встроенных php-функций

Часто при написании тестов необходимо протестировать внешнюю функцию или функцию, которая встроенная в php. Рассмотрим для примера сохранение метаполей для постов в WordPress: class Metabox { public function save( int $post_id ) { $nonce = filter_input( INPUT_POST, ‘_nonce’, FILTER_SANITIZE_STRING ); if ( ! wp_verify_nonce( $nonce, ‘very-secret-nonce’ ) ) { return; } $field = filter_input( INPUT_POST, …

ПодробнееПодмена встроенных php-функций

Тестирование абстрактных методов

Объект абстрактного класса мы не можем создать напрямую. Поэтому работать с ним будем через stub. Что такое stub можно прочитать в статье про Модульное тестирование. Пример абстрактного класса Abstract_Suit: abstract class Abstract_Suit { abstract public function abstract_method(); } Тестируем с помощью метода getMockForAbstractClass use PHPUnitFrameworkTestCase; class Test_Suit extends TestCase { public function test_abstract_class() { $stub …

ПодробнееТестирование абстрактных методов

Вызов защищенных и приватных методов

Если вам понадобился данный трюк то скорее всего вы имеете проблему в архитектуре вашего класса/приложения. Его использование это крайняя мера. Лучше всего тестировать приватные свойства и методы через публичные методы. Использование данного трюка оправдано в случае экономии времени и при полном понимании зачем вы это делаете. Пример тестируемого класса: class Duck { private function idea( …

ПодробнееВызов защищенных и приватных методов

Подмена защищенных и приватных свойств для тестирования

Иногда в тестах нам нужно заменить protected или private свойство объекта, чтобы ускорить тест или более качественно протестировать объект. Пример тестируемого класса: class Suit { private $private_property = ‘private property’; public function method(): string { return $this->private_property; } } Чтобы заменить свойство $private_property на другое нам поможет ReflectionProperty: use PHPUnitFrameworkTestCase; use ReflectionProperty; class Test_Suit extends …

ПодробнееПодмена защищенных и приватных свойств для тестирования

Тестирование объектов с извращениями в конструкторе

Иногда разработчики добавляют в конструктор какие-то нежелательные эффекты, вызовы различных методов или зависимости с другими объектами. Например: class Duck { public function __construct() { $this->life = new Life(); } public function say() { echo ‘quack’ . PHP_EOL; } } Для того, чтобы протестировать метод say() нам нужно как-то замокать new Life с помощью заглушек для …

ПодробнееТестирование объектов с извращениями в конструкторе

Все что нужно знать про WP Cron в WordPress

Что такое cron и в чем его отличие от wp-cron? Cron — команда UNIX, которая используется для выполнение периодических задач, через заданный промежуток времени. Wp-cron — псевдо-крон, который необходим для выполнение функционала обычного крона, но в рамках wordpress. Он необходим для следующих задач: проверка обновлений ядра, плагинов, тем функционал сторонних плагинов, которые используют cron. Особенности …

ПодробнееВсе что нужно знать про WP Cron в WordPress

Принципы SOLID и с чем их едят?

SOLID — мнемонический акроним, введённый Майклом Фэзерсом (Michael Feathers) для первых пяти принципов, названных Робертом Мартином в начале 2000-х, которые означали пять основных принципов объектно-ориентированного программирования и проектирования. Для чего нужны принципы SOLID? Принципы SOLID — это набор правил, которые необходимо применять во время работы над программным обеспечением(ПО) для его улучшения. Удивительно то, что принципы …

ПодробнееПринципы SOLID и с чем их едят?

Dependency Injection (Внедрение зависимостей)

Проблема class Order { public $id; } class Order_Processing { public function create_new_order(): void { /* Логика выполнения заказа */ $this->log(‘Order created!’); } private function log( string $message ): void { echo «Save log with message: {$message}» . PHP_EOL; } } $order_processing = new Order_Processing(); $order_processing->create_new_order(); В классе Order_Processing принцип Single Responsibility т.к. кроме обработки …

ПодробнееDependency Injection (Внедрение зависимостей)

DOMDocument

DOMDocument — класс для работы с XML-документами. Данный инструмент удобно использовать, когда вам необходимо парсить xml/html-документы. Простой пример использования класса DOMDocument: $dom = new DOMDocument(); $dom->loadHTML( $html ); $dom->saveHTML(); Рассмотрим основные ошибки и сложности с которыми можно столкнуться: Кодировка Невалидный документ Выбор елементов Удаление елементов Кодировка Для начала документ нужно загрузить с корректной кодировка. В …

ПодробнееDOMDocument

Как подружить WordPress и Twig

Что такое шаблонизатор? Шаблонизатор (в web) — программное обеспечение, позволяющее использовать html-шаблоны для генерации конечных html-страниц. Основная цель использования шаблонизаторов — это отделение представления данных от исполняемого кода. Часто это необходимо для обеспечения возможности параллельной работы программиста и дизайнера-верстальщика. Использование шаблонизаторов часто улучшает читаемость кода и внесение изменений во внешний вид, когда проект целиком выполняет один человек. Wikipedia Самая важная функция …

ПодробнееКак подружить WordPress и Twig

100 дней ответов на StackOverflow

Все разработчики знают такой сервис как StackOverflow(SO). Для тех, кто не знает — это самая популярная система вопрос/ответ для разработчиков и администраторов. На платформе можно найти идеи для своих реализаций в виде кода, задавать вопросы и отвечают на них. Метки и фильтры Мир ИТ сейчас достаточно широк и разбираться во всем невозможно, поэтому нужно отметить …

Подробнее100 дней ответов на StackOverflow

WordPress Coding Standards(WPCS)

WPCS — это набор правил PHP_CodeSniffer (сниффы) для проверки кода, разработанного для WordPress. Он обеспечивает качество кода и соблюдение соглашений официальных стандартов кода для WordPress. Если вы работаете в команде из более 1-го человека, то стоит подумать о едином стандарте коде (code style). Даже если вы в своей команде смогли договорится о каком-то стандарте, то …

ПодробнееWordPress Coding Standards(WPCS)