Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Wordpress в виде минимальной сборки для нужд тестирования + инструменты

Notifications You must be signed in to change notification settings

ProklUng/wordpress-test-build

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

27 Commits

Repository files navigation

Wordpress в виде минимальной сборки для нужд тестирования + инструменты

INTERNAL

Установка

  1. composer.json:
 "repositories": [
 {
 "type": "git",
 "url": "https://github.com/proklung/wordpress-test-build"
 }
 ]
  1. 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.

Управление

Трэйт ResetDatabaseTrait

Указание сбрасывать базу перед каждым тестом и загружать по новой.

Трэйт CustomDumpTrait

Сбрасывать базу и загружать кастомный дамп базы.

Путь к дампу указывается в методе getDumpPath теста:

 protected function getDumpPath() : string
 {
 return $_SERVER['DOCUMENT_ROOT'] . '/Tests/dump/dump.sql';
 }

Действует только в сочетании с ResetDatabaseTrait.

Трэйт UseMigrationsTrait

Указание запускать миграции перед каждым тестом.

Под капотом урезанная версия пакета, так что подходят миграции и от него. Миграция наследуется не от класса 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`

Трэйт ActivatePluginsTrait

Некоторые популярные плагины (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)

Прочее

  1. Статический метод getWordpressBaseDir - путь к месту, где лежит Wordpress.

  2. Провайдеры данных для Faker:

Wordpress
  • permalink - путь к посту по ID
  • fileContent - контент файла
  • uploadDir - путь к аплоаду
  • postId - случайный ID поста
  • attachmentId - случайная картинка
  • userId - случайный ID пользователя
  • termId - случайная таксономия (категория, тэг)
Picsum
  • 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()
 ]
 ]);
 }

About

Wordpress в виде минимальной сборки для нужд тестирования + инструменты

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /