inpsyde / wp-tests-starter
一个帮助您快速设置 WordPress 集成测试环境的包。
Requires
- php: >=5.3.0
Requires (Dev)
- inpsyde/wordpress-dev: dev-master
Suggests
- inpsyde/wordpress-dev: WordPress development composer package.
This package is auto-updated.
Last update: 2024-09-05 14:20:14 UTC
README
注意:您正在阅读开发分支针对 2.0.0 版本的文档。您可以在 version-1 分支找到 1.0 版本的文档。
Wp Tests starter 是一个库,它可以帮助您使用官方的 wordpress-develop 仓库,通过 WordPress 核心来设置您的插件或库的集成测试。与单元测试的主要区别是您不需要(通常也不希望)模拟任何 WordPress 函数。相反,您拥有一个完全启动的 WordPress 核心以及与数据库服务器的实际连接。
所以如果您以 ORM 风格将对象映射到 WordPress 帖子上,您的集成测试将如下所示
public function testPersistBook(): void { $book = new Book('The Da Vinci Code', 'Dan Brown', '2003'); $testee = new BookRepository($GLOBALS['wpdb']); $testee->persist($book); // maps book to WP_Post object and post meta self::assertGreaterThan(0, $book->id()); $wpPost = get_post($book->id()); self::assertSame('The Da Vinci Code', $wpPost->post_title); self::assertSame('2003', get_post_meta($book->id(), '_publishing_year', true)); self::assertSame('Dan Brown', get_post_meta($book->id(), '_author', true)); }
不需要模拟。只需在 PHPUnit 测试用例中运行 WordPress。
安装
为了使用 Wp Tests Starter,您需要:具有 Composer 的 PHP 环境,以及具有 专用测试数据库 的 MySQL 服务器。此数据库应该是完全瞬时的,因此不要使用包含重要数据的任何数据库。您还需要以下四个 Composer 包作为开发依赖项安装
inpsyde/wp-tests-starter
yoast/phpunit-polyfills
wordpress/wordpress
来自 wordpress-develop 仓库phpunit/phpunit
由于最后一个在 packagist.org 上不可用,您必须手动将存储库添加到您的 composer.json 文件中,方法是在其中添加
"repositories": [ { "type": "vcs", "url": "https://github.com/WordPress/wordpress-develop" } ]
现在您可以运行
composer require --dev inpsyde/wp-tests-starter yoast/phpunit-polyfills wordpress/wordpress phpunit/phpunit
请注意,这需要一段时间,因为 Composer 将分析整个 GitHub 上的 WordPress 仓库。(一旦放置了 composer.lock,下一次安装运行将更快。)
设置您的测试
为了设置您的 PHPUnit 测试,您需要两个文件:phpunit.xml.dist
和一个 boostrap.php
,它由 PHPUnit 在实际测试执行之前加载。这两个文件的示例假设您的库目录结构如下所示
├ src/
| └ MyModule.php
├ tests/
| ├integration/
| | └ MyModuleTest.php
| └boostrap.php
├ vendor/
├ composer.json
└ phpunit.xml.dist
以下 phpunit.xml.dist 文件的示例告诉 PHPUnit 测试文件的位置,并将数据库凭据作为环境变量包含在内
<phpunit bootstrap="tests/bootstrap.dist.php" > <php> <env name="WPTS_DB_URL" value="mysql://user:password@host/db_name?table_prefix=wp_test_"/> </php> <testsuites> <testsuite name="integration"> <directory suffix="Test.php">./tests/integration</directory> </testsuite> </testsuites> </phpunit>
最后,tests/boostrap.php
加载 Wp Tests Starter 和 WordPress
<?php declare(strict_types=1); namespace MyProject\Tests; use Inpsyde\WpTestsStarter\WpTestsStarter; $projectDir = dirname(__DIR__); require_once $projectDir . '/vendor/autoload.php'; $starter = new WpTestsStarter( $projectDir . '/vendor/wordpress/wordpress', // path to the WordPress library getenv('WPTS_DB_URL') // Databse credentials in URL format, set in phpunit.xml.dist ); // Some configuration: $starter // Install WP core as multisite ->testAsMultisite() // boostrap your plugin or module code ->addActivePlugin(static function() { (new MyModule())->init(); }) // add filters early ->addFilter('my_app.modules', static function(array $modules): array { // whatever, it's just an example return $modules; }) //finally load WordPress ->bootstrap();
这些文件仅显示了使用 WP Tests Starter 运行集成测试的简短方法。您还可以通过 WpTestsStarter
对象的方法获得其他几个配置选项。
运行 PHPUnit
有了这种配置,您可以使用以下命令执行 tests/integration
中所有测试类的 PHPUnit
vendor/bin/phpunit
在每次运行中,WP Starter 将将配置写入 vendor/wordpress/wordpress/wp-config.php
,并加载 WordPress 内部引导脚本,这确保了数据库表的安装等。
配置
数据库 URL
为了不维护多个环境变量,您可以通过单个参数传递所有数据库凭据和选项,如下所示
mysql://user:password@localhost:3306/test_db?table_prefix=wp_tests_&charset=utf8mb4&collation=utf8_general_ci
此 URL 可以通过构造函数参数或 useDbUrl()
方法传递给 WpTestsStarter
<?php //either $starter = new WpTestsStarter($baseDir, $dbUrl); // or $starter->useDbUrl($dbUrl);
上面的 URL 示例将转换为以下 WordPress 常量和全局变量
<?php define('DB_HOST', 'localhost:3306'); define('DB_USER', 'user'); define('DB_PASSWORD', 'password'); define('DB_NAME', 'test_db'); define('DB_CHARSET', 'utf8mb4'); define('DB_COLLATE', 'utf8_general_ci'); $GLOBALS['table_prefix'] = 'wp_tests_'
基本上,此 URL 的所有值都是可选的,但请记住,您需要一个完整的 WordPress 配置。或者,您可以使用显式值
$starter ->useDbHost('localhost') ->useDbUser('user'); // and so on
许可
本存储库是免费软件,并按照GNU通用公共许可证版本2或(根据您的选择)任何后续版本发布。有关完整的许可证,请参阅许可证。