Модульное тестирование 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 …

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

Laravel Schematics — проектируем базу данных (часть 3)

Продолжаем работу над игрой «Камень, ножницы, бумага». В этом эпизоде займёмся проектированием структуры базы данных и мделаем это с помощью утилиты Laravel Schematics. Исходный код проекта: https://github.com/pqr/laravel-livewire-rock-paper-scissors Плейлист со всеми сериями: https://www.youtube.com/playlist?list=PLvP6XNj3GUhB4idkTp1KPBki3-070Ymcq Источник: 5minphp.ru  

Laravel Livewire — Исправляем уязвимости (часть 2)

Продолжаем работу над игрой «Камень, ножницы, бумага» с использованием Laravel Livewire. В этом эпизоде исправим дыру в безопасности и обсудим, на что стоит обращать внимание при работе с Livewire, чтобы не отдать лишние данные на клиент? Исходный код проекта: https://github.com/pqr/laravel-livewire-rock-paper-scissors Плейлист со всеми сериями: https://www.youtube.com/playlist?list=PLvP6XNj3GUhB4idkTp1KPBki3-070Ymcq Источник: 5minphp.ru  

Laravel Livewire — Камень, ножницы, бумага (часть 1)

Напишем игру «Камень, ножницы, бумага» с помощью Laravel Livewire. Livewire позволяет создавать динамические веб-интерфейсы без программирования на JavaScript. Весь код будем писать исключительно на PHP, при этом приложение будет работать без перезагрузки страницы и общаться с сервером с помощью Ajax. Исходный код проекта: https://github.com/pqr/laravel-livewire-rock-paper-scissors Плейлист со всеми сериями: https://www.youtube.com/playlist?list=PLvP6XNj3GUhB4idkTp1KPBki3-070Ymcq Источник: 5minphp.ru  

Архитектура сложных веб-приложений. С примерами на Laravel

Недавно я прочитал книгу «Архитектура сложных веб-приложений. С примерами на Laravel», автор Adel Faizrakhmanov. Эта книга не пособие. Много шаблонов описаны поверхностно, с целью просто познакомить читателя с ними. Более подробное описание можно найти по ссылкам в конце. Книга читается легко и с интересном, никакой воды, наоборот, иногда хочется продолжения и углубления в тему, больше …

ПодробнееАрхитектура сложных веб-приложений. С примерами на Laravel

Оптимизация ORDER BY RAND()

Обложка к записи Оптимизация ORDER BY RAND()

Как выбрать случайную запись из таблицы в MySQL? Во всех учебниках и мануалах случайную запись выбирают так: SELECT id FROM files ORDER BY rand() LIMIT 1; Но такие запросы работают очень медленно. Посмотрим на EXPLAIN: EXPLAIN SELECT id FROM files ORDER BY rand() LIMIT 1; Увидим, что MySQL создает временную таблицу и использует сортировку всех данных. …

ПодробнееОптимизация ORDER BY RAND()

PHP Russia Online и другие Online конференции Олега Бунина

Пятиминутка PHP · PHP Russia Online и другие Online конференции Олега Бунина В этот период, когда массовые мероприятия запрещены, IT конференции переходят в Online формат. Как выглядят Online конференции и как они будут выглядеть в будущем? Обсуждаем с Олегом Буниным, организатором многих IT конференций в России, включая такие известные ежегодные события, как HighLoad++, РИТ++ и …

ПодробнееPHP Russia Online и другие Online конференции Олега Бунина

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

Если вам понадобился данный трюк то скорее всего вы имеете проблему в архитектуре вашего класса/приложения. Его использование это крайняя мера. Лучше всего тестировать приватные свойства и методы через публичные методы. Использование данного трюка оправдано в случае экономии времени и при полном понимании зачем вы это делаете. Пример тестируемого класса: 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