用于模拟循环的单元测试

时间:2016-03-01 作者:philosophyguy

您如何使用PHPUnit和WordPress测试框架构建单元测试来模拟处于循环中?例如,如果我想测试一个只能在循环中调用的函数,因为它假定post数据是为主查询设置的,那么我应该如何构造该单元测试?

3 个回复
SO网友:Mark Kaplun

关键是go_to 方法WP_UnitTestCase 应该扩展的类。它模拟解析相对于wordpress根目录(IIRC)的url。您可能需要先设置帖子和其他信息,然后致电go_to 触发循环。

SO网友:piersb

假设您使用的是WP\\U UnitTestCase,请在测试类中尝试以下操作:

private $post_id;

// use the factory to create a post with some fake data
public function setUp() {
    parent::setUp();

    $this->post_id = $this->factory()->post->create( 
        array ( \'post_content\' => \'Here are some words. <img src="image.jpg"> <!--more--> And here are some more\' ) 
    );

}

public function test_a_thing() { 

    // fake going to the URL
    $this->go_to( get_permalink( $this->post_id ) );

    // make sure your relevant globals are set
    global $post;
    setup_postdata($post);

    // profit
    $yourthing->function_you_test();
}

SO网友:Jim Maguire

Wordpress中的插件功能单元测试非常困难。进行验收或功能测试通常更容易。不同之处在于,在单元测试中,必须模拟与之交互的所有内容。在功能测试中,您可以运行整个系统。例如,我使用Codeception启动浏览器并对整个系统进行测试。虽然观点各不相同,但我认为对WP插件进行单元测试的整个概念都很古怪。插件不是真空存在的。它是一个与另一个系统交互的系统。甚至试图孤立有什么意义?顺便说一句,几乎没有开发人员真正这样测试。WP测试框架的状态很抱歉。

相关推荐

当in_the_loop()为假时,何时以及为什么is_Single(‘my_cpt’)为真?

我正在使用模板系统的示例代码。此地址的页码:http://project.test/my_cpt/hello-post/.无法理解原因is_singular( \'my_cpt\' ) 是true 虽然in_the_loop() 是false.在页面模板中The Loop "E;“工程”:if ( have_posts() ) { while ( have_posts() ) { the_post(); ?>