INTERNAL
- composer.json:
"repositories": [
{
"type": "git",
"url": "https://github.com/proklung/wordpress-test-build"
}
]
composer require proklung/wordpress-test-build
На текущий момент внутри русская версия 5.7.2
Wordpress.
Базовый класс для тестов - WordpressableTestCase
. Запускает, приложенный к пакету Wordpress и позволяет использовать в тестах
его API.
Параметры доступа к БД определяются в методе setupDatabaseData
базового класса WordpressableTestCase
.
Если база на момент запуска не существует, то будет создана.
По умолчанию:
protected function setupDatabaseData() : void
{
putenv('MYSQL_HOST=localhost');
putenv('MYSQL_DATABASE=wordpress_ci');
putenv('MYSQL_USER=root');
putenv('MYSQL_PASSWORD=');
}
Класс WordpressableAjaxTestCase
- особый случай для тестирования нативных ajax-обработчиков. По аналогии
c WP_Ajax_UnitTestCase.
Указание сбрасывать базу перед каждым тестом и загружать по новой.
Сбрасывать базу и загружать кастомный дамп базы.
Путь к дампу указывается в методе getDumpPath
теста:
protected function getDumpPath() : string
{
return $_SERVER['DOCUMENT_ROOT'] . '/Tests/dump/dump.sql';
}
Действует только в сочетании с ResetDatabaseTrait
.
Указание запускать миграции перед каждым тестом.
Под капотом урезанная версия пакета, так что подходят миграции и от него.
Миграция наследуется не от класса Arrilot\BitrixMigrations\BaseMigrations\WordpressMigration
.
Путь к директории с миграциями указывается в методе getMigrationsDir
теста:
protected function getMigrationsDir() : string
{
return __DIR__ . '/../migrations';
}
К трэйту приложен метод-хелпер makeMigration
для создания миграций по шаблону.
protected function makeMigration(string $name, string $template) : void
Доступные шаблоны:
Название | Описание | Алиасы |
---|---|---|
`default` | Чистый шаблон по умолчанию | |
`query` | Произвольный запрос в БД | |
`add_table` | Создание таблицы через | `create_table` |
`delete_table` | Удаление таблицы | `drop_table` |
Некоторые популярные плагины (WTF?!) не могут быть установлены с помощью композера. Приходится воротить всякое.
Трэйт с функционалом (метод activatePlugins
) инсталляции (копирование из заданной папки) и активации
плагинов.
Определяются два свойства:
pluginSrcDir
- путь к директории, где лежат исходники плагинов (для копирования)plugins
- массив вида 'директория с плагином' => путь к основному файлу плагина. Задается в конечном тесте:
protected static function getWordpressBaseDir() : string
{
return __DIR__. '/../../files';
}
protected static $pluginSrcDir = __DIR__ . '/files';
// Скопирует ACF плагин из папки __DIR__ . '/files' в папку, где лежит Wordpress.
protected function setUp(): void
{
// Важно задать параметры перед вызовом родителя.
static::$pluginSrcDir = __DIR__ . '/files';
static::$plugins = [
'advanced-custom-fields' => 'advanced-custom-fields/acf.php'
];
parent::setUp();
}
Мигрирован кое-какой функционал из пакета.
- Метод
goTo
классаWordpressableTestCase
. Эмулирует (с выставлением всех нужных глобалов) нахождение на такой-то странице.
$this->goTo('/?p=26799'); // Url - только так, без ЧПУ
$this->assertTrue(is_single());
- Ассерты
assertWPError
иassertNotWPError
. - Ассерт
assertQueryTrue
: "Checks each of the WP_Query is_* functions/properties against expected boolean value". - Метод
scanUserUploads
- все файлы в директории с аплоадом. - Метод
setPermalinkStructure
- Метод
makeAttachment(array $upload, int $parent_post_id = 0)
- создать аттачмент. - Метод
updatePostModified(int $post_id, string $date)
-
Статический метод
getWordpressBaseDir
- путь к месту, где лежит Wordpress. -
Провайдеры данных для Faker:
permalink
- путь к посту по IDfileContent
- контент файлаuploadDir
- путь к аплоадуpostId
- случайный ID постаattachmentId
- случайная картинкаuserId
- случайный ID пользователяtermId
- случайная таксономия (категория, тэг)
picsum
- Картинка из picsum. Возвращает путь к загруженной картинке в рамках Wordpress.
Использование в миграциях
use Prokl\WordpressCi\FixtureGenerator\Repository\AttachmentRepository;
use Prokl\WordpressCi\FixtureGenerator\Repository\PostRepository;
use Prokl\WordpressCi\FixtureGenerator\Repository\TermRepository;
use Prokl\WordpressCi\FixtureGenerator\Repository\UserRepository;
public function up()
{
$faker = Helper::getFaker();
AttachmentRepository::create(10); // 10 картинок
TermRepository::create(10, 'category'); // 10 категорий
TermRepository::create(5, 'post_tag'); // 10 тэгов
UserRepository::create(5); // 5 пользователей
// АСF поля. То, что отдает плагин ACF.
acf_add_local_field_group(array(
'key' => 'group_5e12e975546ec',
'title' => 'Видео',
'fields' => array(
array(
'key' => 'field_5e130144fa51a',
'label' => 'Видео элемент',
'name' => 'video_element',
'type' => 'relationship',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array(
'width' => '',
'class' => '',
'id' => '',
),
'post_type' => array(
0 => 'myvideo',
),
'taxonomy' => '',
'filters' => array(
0 => 'search',
1 => 'post_type',
2 => 'taxonomy',
),
'elements' => array(
0 => 'featured_image',
),
'min' => '',
'max' => '',
'return_format' => 'object',
),
),
'location' => array(
array(
array(
'param' => 'post_type',
'operator' => '==',
'value' => 'post',
),
),
),
'menu_order' => 0,
'position' => 'normal',
'style' => 'default',
'label_placement' => 'top',
'instruction_placement' => 'label',
'hide_on_screen' => array(
0 => 'discussion',
),
'active' => true,
'description' => '',
));
// 10 постов с картинками и acf полями.
PostRepository::create(10, [
'acf' => [
'video_element' => $faker->postId()
]
]);
}