我正在使用phpunit和WP_Mock为WordPress插件编写测试,如果我的类中的方法未正确调用(接收到它需要的所有参数),我想返回WP_Error
。 / p>
当然,执行此操作的标准方法是在那时创建并返回一个新的WP_Error
-但由于在运行测试时未加载WordPress,因此WP_Error
类不会不存在。
其他WordPress类正在被模拟,并被注入了Mockery,但这似乎对测试WP_Error
被抛出来了杀伤力;但我没有看到其他任何明智的中途计划。
是否有模拟WP_Error
的好方法?
答案 0 :(得分:2)
在plugins_loaded
操作之后执行测试,例如:
add_action('plugins_loaded', 'your_func');
function your_func()
{
...
}
包括一次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' );