在运行单元测试时安装和加载其他插件

时间:2016-06-08 作者:Andrew

我想为插件编写单元测试。我已经使用WP-CLI构建了测试WordPress实例,并且可以成功运行测试。

我为其编写单元测试的插件是一个特定于站点的插件,而不是一个专为wordpress开发的独立插件。组织存储库。作为一个特定于站点的插件,一些函数使用其他插件提供的函数,例如高级自定义字段。

Question: 在测试特定于站点的插件时,如何在WP-CLI搭建的站点中安装和加载其他插件?

我看了看bin/install-wp-test.sh 希望我可以添加额外的wp-cli命令来安装和激活所需的插件,但此脚本似乎没有使用wp-cli创建测试WordPress实例。

我还尝试更新_manually_load_plugin 内的功能tests/bootstrap.php 文件,但它没有任何效果。

/**
 * PHPUnit bootstrap file
 *
 * @package Site Specific Plugin
 */

$_tests_dir = getenv( \'WP_TESTS_DIR\' );
if ( ! $_tests_dir ) {
    $_tests_dir = \'/tmp/wordpress-tests-lib\';
}

// Give access to tests_add_filter() function.
require_once $_tests_dir . \'/includes/functions.php\';


/**
 * Manually load the plugin being tested.
 */
function _manually_load_plugin() {
    require dirname( dirname( __FILE__ ) ) . \'/battingforchange.php\';
    // Update array with plugins to include ...
    $plugins_to_active = array(
        \'advanced-custom-fields-pro/acf.php\'
    );
    update_option( \'active_plugins\', $plugins_to_active );
}
tests_add_filter( \'muplugins_loaded\', \'_manually_load_plugin\' );

// Start up the WP testing environment.
require $_tests_dir . \'/includes/bootstrap.php\';

2 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

您试图做的不是单元测试,而是集成测试,由于集成通常需要一些特定于相关插件的初始化,因此很难给出一个比明显的“包含插件文件”更一般的答案

单元测试的思想是检查您的API是否执行了它们应该执行的操作,基本假设应该是外部API正常工作,否则您必须编写的测试数量没有限制。

一旦您假设外部API正常工作,那么如果您实际调用它们,或者只是用相同的名称编写一个模仿其行为的函数,则没有任何区别。

作为这个想法的一个例子。在我编写的插件中,有几个设置可以控制哪个参数WP_Query 正在调用。为了测试这一点,我只需检查参数的结果数组,而不必实际调用WP_Query.

SO网友:Andrew

WP-CLI生成的测试环境旨在对单个插件进行单元测试,而不是如Mark Kaplun.

然而,通过在Unit Testing Themes and Plugins in WordPress 您可以加载主题和其他插件来进行更广泛的集成测试。

相关推荐

WP-CLI插件安装导致PHP致命错误-在不在对象上下文中时使用$This

运行时sudo wp install plugin pluginname --allowroot它会导致错误:PHP致命错误:未捕获错误:在/var/www/html/wp-content/plugins/pluginname/blocks中不在对象上下文中时使用$this。菲律宾比索:89我们有一个自定义插件,其中包含以下内容: class Block{ public static function Run() { add_action(\'e