如何测试WP_Error?

时间:2018-11-16 12:14:15

标签: php wordpress unit-testing phpunit

我正在使用phpunit和WP_Mock为WordPress插件编写测试,如果我的类中的方法未正确调用(接收到它需要的所有参数),我想返回WP_Error。 / p>

当然,执行此操作的标准方法是在那时创建并返回一个新的WP_Error-但由于在运行测试时未加载WordPress,因此WP_Error类不会不存在。

其他WordPress类正在被模拟,并被注入了Mockery,但这似乎对测试WP_Error被抛出来了杀伤力;但我没有看到其他任何明智的中途计划。

是否有模拟WP_Error的好方法?

3 个答案:

答案 0 :(得分:2)

方法1:

plugins_loaded操作之后执行测试,例如:

add_action('plugins_loaded', 'your_func');
function your_func()
{
   ...
}

方法2:

包括一次WP_error类:

include_once(ABSPATH.'wp-includes/class-wp-error.php');
...
your code

答案 1 :(得分:1)

最简单的方法: 引导测试时,只需include_once定义为WP_Error的文件( wp-includes / class-wp-error.php )。这样,将在您需要实例化类时定义该类。

WP_Error没有任何其他依赖关系,因此包括它应该很重要。

您不是要测试类的实际行为,而是仅返回该类的对象。因此,如果存在正确的定义,则无需模拟任何内容。

更好的方式: 使用WP-CLI进行搭建。这样,您就可以访问wordpress函数和类。

您将需要安装WP-CLI并进行有效的WP安装,其中包含您的插件文件。

首先,您需要做插件脚手架。在您的WP目录中运行

wp scaffold plugin-tests your-plugin

这将在您的插件目录中创建一组与此类似的文件:

|-bin/
|----install-wp-tests.sh
|-tests/
|----bootstrap.php
|----test-sample.php
|-.travis.yml
|-phpcs.xml.dist
|-phpunit.xml.dist
|-your-plugin.php

您需要cd到插件目录,然后从那里运行测试环境初始化:

bin/install-wp-tests.sh db_name db_user 'db_password' db_host wp_version

参数不言自明。 wp_version可以为latest。在此数据库上,wp-cli将创建一组测试表,并将在/ tmp目录中创建WP安装,并使用每次运行phpunit时将使用的上述值进行配置。

此后,只需调用phpunit并运行测试即可。您可以将test-sample.php用作起点,也可以在此处复制。

以这种方式运行测试时,将定义WP_Error,您可以轻松地测试您的方法是否正确返回了它。

测试愉快!

答案 2 :(得分:0)

从T.Todua的答案中得知,我的composer.json如下:

{
    "require-dev": {
        "cyruscollier/wordpress-develop": "dev-master",
        "10up/wp_mock": "0.4.2",
        "dealerdirect/phpcodesniffer-composer-installer": "*",
        "wp-coding-standards/wpcs": "1.*"
    }
}

在我的tests/UnitTest.php setUp()方法中,我有:

$basedir = dirname( dirname( __FILE__ ) );

require_once( $basedir . '/vendor/wordpress/wp-includes/class-wp-error.php' );