proklung/wordpress-test-build

用于测试的Wordpress最小构建 + 工具

1.2.5 2021-06-15 07:50 UTC

This package is auto-updated.

Last update: 2024-09-15 19:47:40 UTC


README

内部

安装

  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。

数据库访问参数在基本类 WordpressableTestCasesetupDatabaseData 方法中定义。

如果启动时数据库不存在,则将创建它。

默认情况下

    protected function setupDatabaseData() : void
    {
        putenv('MYSQL_HOST=localhost');
        putenv('MYSQL_DATABASE=wordpress_ci');
        putenv('MYSQL_USER=root');
        putenv('MYSQL_PASSWORD=');
    }

WordpressableAjaxTestCase 类 - 用于测试原生ajax处理器的特殊案例。类似于 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

可用的模板

ActivatePluginsTrait 特性

一些流行的插件(WTF?!)无法通过Composer安装。不得不进行各种操作。

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

此外

中迁移了一些功能。

  • WordpressableTestCase 类的 goTo 方法。模拟(设置所有必要的全局变量)在某个页面上的位置。
        $this->goTo('/?p=26799'); // Url - только так, без ЧПУ
        $this->assertTrue(is_single());  
  • assertWPErrorassertNotWPError 断言。
  • assertQueryTrue 断言:检查每个 WP_Query 的 is_* 函数/属性是否与预期的布尔值匹配。
  • scanUserUploads 方法 - 上传目录中的所有文件。
  • setPermalinkStructure 方法
  • makeAttachment(array $upload, int $parent_post_id = 0) 方法 - 创建附件。
  • updatePostModified(int $post_id, string $date) 方法

其他

  1. 静态方法 getWordpressBaseDir - Wordprss的位置路径。

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