Кто еще не знаком с тестированием и модульным тестированием можете ознакомится: Автоматизация тестирования, .
Тестирование тем и плагинов под WordPress имеет одну большую проблему — взаимодействие с ядром. Решить ее можно с помощью библиотек Brain-WP/BrainMonkey или 10up/WP_Mock.
Как писать тесты с помощью 10up/WP_Mock вы можете прочитать в статье: Модульное тестирование WordPress (PHPUnit, WP_Mock), но а сейчас разберемся с Brain Monkey.
Библиотека Brain Monkey помогает делать заглушки для функций и классов из ядра WordPress.
Установка библиотеки Brain-WP/BrainMonkey для тестирования WordPress
Устанавливаем библиотеку через composer:
Для работы библиотеки нужно использовать фикстуры setUp
и tearDown
:
Теперь мы можем делать заглушки абсолютно для любых функций и классов WordPress.
Возможности библиотеки
Brain\Monkey\Functions\when;
Данная функция нужна для того, чтобы при вызове функции вернуть какой-то результат.
justReturn
При помощи when
мы делаем мок для функции function_name
и при ее вызове будет возвращен результат из метода justReturn
.
returnArg
При помощи when
мы делаем мок для функции function_name
и при ее вызове будет возвращен аргумент функции под номером из метода returnArg
.
Это очень удобно, когда нам нужно использовать функции для очистки переменных или очистки данных перед выводом(sanitize_*, esc_*).
justEcho
При вызове функции function_name
выводим на экран текст из метода justEcho
.
alias
Вызов функции duplicate
мы заменяем на нашу функцию.
При вызове функции bigger
будет вызвана функция strtoupper
.
Brain\Monkey\Functions\stubs;
Функция для массовой замены функций:
При вызове каждой из функций будет возвращаться первый аргумент, который был в нее передан. Тоже самое что и when( 'func1' )->returnArg()
, но массово.
Так же можно вторым параметром указать результат функций:
Или еще круче, передав массив ключ-значени, в котором ключ — название функции, а значении примитив или callback.
Подводные камни
null
нельзя передать, как результат функции, поэтому используйте __return_null
для этого:
Если вам нужно замокать функцию, которая возвращает callback
. Поэтому нужно указать callback
, который возвращает callback
.
Brain\Monkey\Functions\expect
Основной инструмент для заглушек функций. В нем можно указать сколько раз, с какими аргументами и что вернула функция.
Функция была вызвана n-раз
Функция была вызвана с такими параметрами:
withAnyArgs()
— с любыми аргументами, с любым их количеством или вовсе без них;withNoArgs()
— без аргументов;with( ... )
— указываем точные аргументы.with( Mockery::type( 'int' ), Mockery::type( 'string' ) )
— первый аргумент любое число, а второй — любая строка;with( Mockery::any() )
— первый аргумент может быть абсолютно любого типа;with( Mockery::anyOf( 'a', 2, true ) )
— первый аргумент любой из списка;with( Mockery::not( 'a', 2, true ) )
— любой, кроме тех, что в списке.
Функция возвращает
andReturn( 'Baz!' )
— функция вернет Baz!;andReturn( 'One', 'Two' )
— функция вернет One в первый раз и Two во второй;andReturnValues( 'One', 'Two' )
— функция вернет One в первый раз и Two во второй;andReturnNull()
— функция вернет null;andReturnUsing( callback )
— функция вернет callback;andThrow( 'RuntimeException' )
— функция выбросит исключениеRuntimeException
.
Тестирование хуков
Тестирование подключений хуков
Тестируемый класс:
Проверить подключение хуков можно с помощью функций has_action
и has_filter
:
Тестирование наличия хуков
Пример класса:
Проверяем с помощью did_action
и applied
, которые возвращают кол-во вызовов данных хуков:
Как видите из прошлого примера, то мы не проверили, с какими параметрами вызван хук и для фильтра не подменили результат.
Поэтому тестировать лучше и более качественее с помощью Brain\Monkey\Actions\expectDone
и Brain\Monkey\Filters\expectApplied
:
Вывод
С помощью Brain Monkey мы можем тестировать большую часть функциональности WordPress. А как вы считаете что лучше WP_Mock или Brain Monkey?
Источник: WP Punk.