mralaminahamed / phpunit-wordpress-tests
WordPress 核心PHPUnit测试库,来自官方WordPress开发者仓库
Requires
- php: >=7.4
- ext-json: *
This package is auto-updated.
Last update: 2024-09-25 06:06:15 UTC
README
概览
概述
PHPUnit WordPress 是WordPress PHPUnit单元测试库(Nightly Build),包含在WordPress核心开发仓库中,可通过Composer进行安装。其主要目标是使测试的启动和运行更快。无需查找脚本或从项目复制,只需添加一个包到您的开发依赖项中。
为什么选择PHPUnit WordPress?
WordPress核心PHPUnit测试库是编写PHPUnit测试的基石库。历史上,它只能通过SVN检出安装,通常从install-wp-tests.sh
脚本中获取。作为一个PHP依赖项,它应该可以通过Composer与其他依赖项一起安装。
实现这一目标的一个障碍是由于库的bootstrap.php
中硬编码的wp-tests-config.php
文件位置。当作为库包含在项目中时,它期望测试配置文件位于库的includes
目录的父目录中。
/ (library root)
├── data
├── includes
│ ├── factory
│ ├── bootstrap.php
│ ├── factory.php
│ ├── functions.php
│ ├── install.php
│ └── ...
└── wp-tests-config.php
通常,这个文件不会作为Composer依赖项安装并可编辑,因为其vendor
目录中的文件不应被修改。
PHPUnit WordPress通过将其包含在包源中解决了这个问题,这相当于您“真实”测试配置文件的代理,它可以位于您希望的位置。
安装
安装最新版本
composer require mralaminahamed/phpunit-wordpress-tests yoast/phpunit-polyfills --dev
因为PHPUnit WordPress是WordPress核心的简单版本化子集镜像,它与其构建的版本具有相同的标签。
为特定版本的WordPress安装版本
composer require mralaminahamed/phpunit-wordpress-tests:dev-main --dev
yoast/phpunit-polyfills
截至WordPress 5.8.2(以及之前主要版本的最新版本),Yoast PHPUnit Polyfills 包被添加为WordPress核心PHPUnit基础设施的必需依赖项,这是PHPUnit WordPress的源。与正常的Composer包不同,它不会自动为您安装,因为它不是mralaminahamed/phpunit-wordpress
的依赖项。就像WordPress本身一样,它必须单独提供,尽管不用担心,这非常简单,可以在初始安装过程中完成(见上文)。
如果您已经使用PHPUnit WordPress并在升级后看到有关此问题的错误,只需使用Composer将其作为开发依赖项引入即可。
composer require --dev yoast/phpunit-polyfills
有关更多信息,请参阅https://github.com/Yoast/PHPUnit-Polyfills。
PHPUnit 兼容性
该库与PHPUnit 3.6+、4、5兼容,并且自那时起已添加了对PHPUnit新版本的支持。
- 在WordPress 4.8中添加了对PHPUnit 6的支持
- 在WordPress 5.1中添加了对PHPUnit 7的支持
- 在WordPress 5.9中添加了对PHPUnit 8和9的支持
- 请参阅#46149
- 有关PHPUnit限制放宽的更多信息,请参阅https://github.com/WordPress/wordpress-develop/commit/8def694fe4c5df95f8e20e40389faf9cb92b6dca
配置
PHPUnit WordPress 的唯一配置是将位置设置为您的真实测试配置文件,作为一个 环境变量。
有多种方法可以实现,但最简单的方法是在您的项目中的 phpunit.xml
文件中定义它!
<phpunit> <!-- ... --> <php> <env name="PHPUNIT_WORDPRESS__TESTS_CONFIG" value="tests/wp-config.php" /> </php> <!-- ... --> </phpunit>
或者,您可以在 PHP 中的任何位置设置它,在需要 includes/bootstrap.php
文件之前。
putenv( 'PHPUNIT_WORDPRESS__TESTS_CONFIG=path/to/wp-tests-config.php' );
创建一个 wp-tests-config.php
文件。
curl -sSL -o wp-tests-config.php https://github.com/WordPress/wordpress-develop/raw/master/wp-tests-config-sample.php
根据需要修改此文件,因为您可能希望将其提交到版本控制。请确保不要在文件中硬编码任何敏感数据。相反,您可以考虑使用类似 phpdotenv
的工具,在 .env
文件中设置您的密钥和秘密,然后将其作为环境变量加载。
表前缀(可选)
您还可以配置要用于测试的表前缀。
可以通过设置 PHPUNIT_WORDPRESS__TABLE_PREFIX
环境变量来配置。如果设置了该变量,则它将覆盖测试配置文件中的设置。如果没有设置,并且 测试配置文件中没有设置 $table_prefix
变量,则它将使用 wptests_
作为后备。
示例
更新默认的 bootstrap.php
文件以使用 PHPUnit WordPress
--- /tmp/tests/bootstrap-before.php +++ /tmp/tests/bootstrap-after.php @@ -5,7 +5,9 @@ */ -$_tests_dir = getenv( 'WP_TESTS_DIR' ); +// Composer autoloader must be loaded before PHPUNIT_WORDPRESS__DIR will be available +require_once dirname( dirname( __FILE__ ) ) . '/vendor/autoload.php'; +$_tests_dir = getenv( 'WP_TESTS_DIR' ) ?: getenv( 'PHPUNIT_WORDPRESS__DIR' ); if ( ! $_tests_dir ) { $_tests_dir = rtrim( sys_get_temp_dir(), '/\\' ) . '/wordpress-tests-lib';
完整工作示例
野外的 PHPUnit WordPress
- 需要 PHPUnit WordPress 的包# PHPUnit WordPress 文档