proklung / wordpress-test-build
用于测试的Wordpress最小构建 + 工具
1.2.5
2021-06-15 07:50 UTC
Requires
- php: >=7.1
- ext-mysqli: *
- 10up/wp_mock: 0.4.2
- proklung/phpunit-testing-tools: ^1.3
- proklung/wp.migrations: ^1.0
- szepeviktor/phpstan-wordpress: ^0.7.1
README
内部
安装
- 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。
数据库访问参数在基本类 WordpressableTestCase
的 setupDatabaseData
方法中定义。
如果启动时数据库不存在,则将创建它。
默认情况下
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());
assertWPError
和assertNotWPError
断言。assertQueryTrue
断言:检查每个 WP_Query 的 is_* 函数/属性是否与预期的布尔值匹配。scanUserUploads
方法 - 上传目录中的所有文件。setPermalinkStructure
方法makeAttachment(array $upload, int $parent_post_id = 0)
方法 - 创建附件。updatePostModified(int $post_id, string $date)
方法
其他
-
静态方法
getWordpressBaseDir
- Wordprss的位置路径。 -
Faker 数据提供者
Wordpress
permalink
- 根据ID的帖子路径fileContent
- 文件内容uploadDir
- 上传路径postId
- 随机帖子IDattachmentId
- 随机图片userId
- 随机用户IDtermId
- 随机分类(类别,标签)
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() ] ]); }