PHPackages                             proklung/wordpress-test-build - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Testing &amp; Quality](/categories/testing)
4. /
5. proklung/wordpress-test-build

ActiveLibrary[Testing &amp; Quality](/categories/testing)

proklung/wordpress-test-build
=============================

Minimal build of Wordpress for testing + tools

1.2.5(4y ago)114UnlicensePHPPHP &gt;=7.1

Since May 13Pushed 4y ago1 watchersCompare

[ Source](https://github.com/ProklUng/wordpress-test-build)[ Packagist](https://packagist.org/packages/proklung/wordpress-test-build)[ RSS](/packages/proklung-wordpress-test-build/feed)WikiDiscussions master Synced 2d ago

READMEChangelog (10)Dependencies (4)Versions (23)Used By (4)

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

[](#wordpress-в-виде-минимальной-сборки-для-нужд-тестирования--инструменты)

**INTERNAL**

Установка
---------

[](#установка)

1. composer.json:

```
  "repositories": [
    {
      "type": "git",
      "url": "https://github.com/proklung/wordpress-test-build"
    }
  ]
```

2. `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](https://infinum.com/handbook/books/wordpress/automated-testing-in-wordpress/basic-tests-using-phpunit/integration-testing#testing-ajax-callbacks).

### Управление

[](#управление)

#### Трэйт ResetDatabaseTrait

[](#трэйт-resetdatabasetrait)

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

#### Трэйт CustomDumpTrait

[](#трэйт-customdumptrait)

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

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

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

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

#### Трэйт UseMigrationsTrait

[](#трэйт-usemigrationstrait)

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

Под капотом урезанная версия [пакета](https://github.com/ProklUng/wp.migrations), так что подходят миграции и от него. Миграция наследуется не от класса `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

[](#трэйт-activatepluginstrait)

Некоторые популярные плагины (WTF?!) не могут быть установлены с помощью композера. Приходится воротить всякое.

Трэйт с функционалом (метод `activatePlugins`) инсталляции (копирование из заданной папки) и активации плагинов.

Определяются два свойства:

- `pluginSrcDir` - путь к директории, где лежат исходники плагинов (для копирования)
- `plugins` - массив вида 'директория с плагином' =&gt; путь к основному файлу плагина. Задается в конечном тесте:

```
    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();
    }
```

#### Дополнительно

[](#дополнительно)

Мигрирован кое-какой функционал из [пакета](https://github.com/wp-phpunit/wp-phpunit).

- Метод `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

[](#wordpress)

- `permalink` - путь к посту по ID
- `fileContent` - контент файла
- `uploadDir` - путь к аплоаду
- `postId` - случайный ID поста
- `attachmentId` - случайная картинка
- `userId` - случайный ID пользователя
- `termId` - случайная таксономия (категория, тэг)

##### Picsum

[](#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()
            ]
        ]);
    }
```

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity3

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity56

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

22

Last Release

1794d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/9210c86ee6734e537eaf22c0f2fe7a965451e340e39e1aae2b74013f24c2660d?d=identicon)[gedovan](/maintainers/gedovan)

---

Top Contributors

[![ProklUng](https://avatars.githubusercontent.com/u/19857467?v=4)](https://github.com/ProklUng "ProklUng (27 commits)")

---

Tags

php7wordpresswordpress-phpunit

### Embed Badge

![Health badge](/badges/proklung-wordpress-test-build/health.svg)

```
[![Health](https://phpackages.com/badges/proklung-wordpress-test-build/health.svg)](https://phpackages.com/packages/proklung-wordpress-test-build)
```

###  Alternatives

[phpspec/prophecy

Highly opinionated mocking framework for PHP 5.3+

8.5k551.7M682](/packages/phpspec-prophecy)[vimeo/psalm

A static analysis tool for finding errors in PHP applications

5.8k77.5M6.7k](/packages/vimeo-psalm)[brianium/paratest

Parallel testing for PHP

2.5k118.8M754](/packages/brianium-paratest)[beberlei/assert

Thin assertion library for input validation in business models.

2.4k96.9M570](/packages/beberlei-assert)[orchestra/testbench

Laravel Testing Helper for Packages Development

2.2k39.1M32.1k](/packages/orchestra-testbench)[phpspec/phpspec

Specification-oriented BDD framework for PHP 7.1+

1.9k36.7M3.1k](/packages/phpspec-phpspec)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
