模拟函数/过滤器等的返回值,以便使用 PHPUnit 测试 WordPress。
使用 WordPress 编写测试是一件痛苦的事情,因为非常旧的官方 WordPress 单元测试总是需要大量的自定义项目实践,而其他测试框架则试图模拟 WordPress 的地狱。解决方案是有一个很好的集成测试包......
总的来说,目标是简单,不浪费时间(对我和你来说)。
下载或只是
composer install --dev pretzlaw/wp-integration-test
除了 PHP 和 WordPress 之外,我们不需要那么多(有关更多详细信息,请参阅 Packagist.org):
如果您从头开始并且还没有一些引导程序,那么您可以像这样使用我们的引导程序:
< phpunit bootstrap = " vendor/Pretzlaw/WPInt/bootstrap.php " >
< testsuites >
< testsuite name = " default " >
<!-- CHANGE THIS TO WHERE YOUR PHPUNIT TEST CLASSES ARE -->
< directory >lib/tests</ directory >
</ testsuite >
</ testsuites >
</ phpunit >
使用这个 bootstrap.php不是强制性的。当您还需要测试 CLI 和管理内容时,请随意创建自定义引导文件。
如果您已经了解 PHPUnit,那么断言和模拟应该不是什么新鲜事。借助 WPInt,只需添加一项特征即可适用于大多数 PHPUnit 测试:
class FooTest extends PHPUnit Framework TestCase {
use Pretzlaw WPInt Traits WordPressTests;
function testBar () {
// Assertions (simple or with special constraints)
static :: assertActionHasCallback ( ' init ' , ' my_own_init ' );
static :: assertShortcodeHasCallback (
[ new IsInstanceOf ( MyOwn::class ), ' some_method ' ],
' my_shortcode '
);
// Mock posts or meta-data
$ this -> mockGetPost ( 1337 )-> andReturn ( / * your wp post mock */ );
$ this -> mockPostMeta ( ' some_key ' )-> andReturn ( ' Some value! ' ); // For all posts
$ this -> mockMetaData ( ' my-own-cpt ' , ' another_key ' , 1337 )-> andReturn ( ' ec ' ); // Just for ID 1337
// Mock actions, filter, cache, ...
$ this -> mockFilter ( ' user_has_cap ' )
-> andReturn ( true );
$ this -> mockCache ()
-> shouldReceive ( ' get ' )
-> with ( ' my_own_cache ' )
-> andReturn ( ' yeah ' );
// Or use one of several shortcuts and helper
$ this -> disableWpDie ();
}
}
正如您在上面看到的,我们使用的是mockery/mockery:~1,它更易于使用和维护,但使用不同的方法名称(例如,如上所示的shouldReceive
andReturn
)。
wp_die()
请随意请求附加功能或通过打开问题指出更常见的快捷方式。
版权所有 2021 Pretzlaw (rmp-up.de)
特此免费授予获得本软件和相关文档文件(“软件”)副本的任何人不受限制地使用本软件,包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或销售软件的副本,并允许向其提供软件的人员这样做,但须满足以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有者均不对因本软件或本软件中的使用或其他交易而产生或与之相关的任何索赔、损害或其他责任负责,无论是合同、侵权行为还是其他行为。软件。