pretzlaw/wp-integration-test

模拟函数/过滤器的返回值,以便使用PHPUnit测试WordPress。

0.4.0 2021-01-21 12:42 UTC

README

WordPress集成测试助手

模拟函数/过滤器的返回值,以便使用PHPUnit测试WordPress。

编写WordPress测试很痛苦,因为非常旧的官方WordPress单元测试总是需要大量手动操作来定制项目,而其他测试框架则试图将WordPress模拟到极致。解决方案是拥有一个优秀的集成测试包,...

  • ... 可以集成到您已经存在的测试中(使用特质)。
  • ... 允许您测试您的包与其他插件或主题。
  • ... 允许在复杂项目中测试。

总体目标是 简单性避免浪费时间(对我而言和您而言)。

安装

下载或

composer install --dev pretzlaw/wp-integration-test

除了PHP和WordPress之外,我们不需要太多(有关详细信息,请参阅Packagist.org

  • phpUnit 6.5 - 9.5
  • mockery 1.3

用法

如果您从零开始并且没有一些现有的启动,则可以使用我们的启动方式如下

<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,它更容易使用和维护,但使用不同的方法名(例如,如上所示 shouldReceiveandReturn)。

所有断言的列表

  • assert Action Has Callback
  • assert Action Not Empty
  • assert Action Not Has Callback
  • assert Filter Empty
  • assert Filter Has Callback
  • assert Filter Not Empty
  • assert Filter Not Has Callback
  • assert Plugin Is Active
  • assert Plugin Is Not Active
  • assert Post Type Args
  • assert Post Type Labels
  • assert Post Type Registered
  • assert Shortcode Exists
  • assert Shortcode Has Callback
  • assert Shortcode Not Exists
  • assert Widget Exists
  • assert Widget Is Instance Of
  • assert Widget Is Not Instance Of
  • assert Widget Not Exists

WordPress期望/模拟的列表

  • expect Wp Post Insert Post
  • mock Cache
  • mock Current User
  • mock Filter
  • mock Get Post
  • mock Meta Data
  • mock Post Meta
  • mock Shortcode
  • mock User Meta

其他测试助手

  • backup Widgets
  • disable wp_die()
  • get All Shortcodes
  • get Shortcode Callback
  • get Widget Factory
  • get Wp Hooks
  • unregister All Widgets
  • unregister Widgets By Id

您可以自由地请求更多功能或指出更多常用快捷方式,通过 打开一个问题

许可证

版权所有2021 Pretzlaw (rmp-up.de)

本软件及相关文档文件(统称为“软件”)的副本获取者,免费获得在此软件中不受限制的处理权,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,以及允许软件的接受者进行此类操作,前提是遵守以下条件:

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

软件按“现状”提供,不提供任何形式的保证,无论是明示的、暗示的,还是关于适销性、特定用途适用性或不侵权的保证。在任何情况下,作者或版权持有人不对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是由于合同行为、侵权行为或其他方式引起的,无论是否与软件或其使用或其他操作有关。