mralaminahamed/phpunit-wordpress-tests

WordPress 核心PHPUnit测试库,来自官方WordPress开发者仓库

dev-main 2024-07-25 05:45 UTC

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新版本的支持。

配置

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

https://github.com/wp-cli/scaffold-command/blob/04be3128e743a0d94a1db5b7da942b538e96e6a8/templates/plugin-bootstrap.mustache

--- /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