WordPress插件PHPUnit测试如何触发激活、安装自定义表及加载自定义常量?
解决方案
1. 触发插件激活钩子安装自定义数据库表
你可以直接修改测试套件自动生成的tests/bootstrap.php文件,手动调用你的插件激活逻辑:
- 先找到你插件注册激活钩子对应的回调函数,比如你的插件主文件里写了
register_activation_hook( __FILE__, 'my_custom_plugin_activate' );,回调函数名就是my_custom_plugin_activate,建表逻辑都在这个函数里。 - 打开
bootstrap.php,找到加载插件主文件的代码,在后面追加一行调用激活函数的代码即可:
// 原有加载插件主文件的代码 require_once dirname( __DIR__ ) . '/my-custom-plugin.php'; // 新增:手动调用激活函数触发建表 my_custom_plugin_activate();
如果你的激活逻辑依赖WordPress核心函数,确保调用位置在WordPress测试环境加载完成之后即可。如果需要每次运行单个测试用例都重置表结构,可以把激活函数调用放在测试基类的setUp()方法中。
2. 加载测试专用自定义常量
只需要在加载WordPress核心之前引入自定义的常量配置文件即可,常量优先级和wp-config.php中定义的完全一致:
- 在测试根目录(和
phpunit.xml同级)新建常量配置文件,比如命名为test-constants.php,在里面填写所有需要的常量定义:
<?php // 测试环境自定义常量 define( 'XXXXX', '测试环境专用值' ); define( 'MY_PLUGIN_ENV', 'test' ); // 其他所需常量依次定义即可
- 打开
tests/bootstrap.php,在文件最开头引入该配置文件:
<?php // 最开头新增:加载测试专用常量 require_once dirname( __DIR__ ) . '/test-constants.php'; // 原有加载WordPress测试环境的代码 require_once '/tmp/wordpress-tests-lib/includes/functions.php'; // ... 其余原有代码不变
注意事项
- 建议把
test-constants.php加入.gitignore,避免本地测试配置提交到公共版本库 - 确保常量配置的引入位置在调用插件激活函数的逻辑之前,避免激活过程中出现常量未定义报错
- 如果需要在单个测试用例中动态修改常量值,可以安装runkit7扩展后用
runkit7_constant_redefine()方法实现
内容的提问来源于stack exchange,提问作者ntheorist
相关产品推荐
相关产品推荐

