在WP单元测试中使用我自己的类

时间:2014-06-07 作者:Eray

(我试图解决代码示例的样式问题)

我正在开发一个主题,但我有一些课程是为这个主题开发的。我想在我的主题上运行单元测试。

我遵循以下步骤:

已将测试repo签出到我的根web文件夹:

svn co http://develop.svn.wordpress.org/trunk/ wordpress-develop
将我的主题文件夹复制到wordpress develop/src/wp content/themes

创建了一个空数据库并设置wp tests配置。php文件。还将此行添加到wp tests配置中。php

define( \'WP_DEFAULT_THEME\', \'THEMENAME\' );
创建wordpress开发/测试/phpunit/测试/konser。包含以下内容的php文件:

<?php
class Test_Konser extends WP_UnitTestCase {

public function test_firstTest(){
     // Arrange
        $id = $this->factory->post->create(array(
                \'post_type\' => \'konser\',
            ));
        add_post_meta($id, "konser_tarih", time());
     $ids = get_posts(array(
            \'post_type\' => \'konser\',
            )
        );
     foreach ($ids as $id) {
     $this->assertInstanceOf(\'WP_Post\',$id);
    $ss = get_post_meta($id->ID, "konser_tarih", true);
    $this->assertTrue($ss!=\'\');
    }
}
}
enter image description here

  • 但是我想用我的KonserPostType 课程。

    function setUp() {
    
       $this->post_id = new Konser(410);
       parent::setUp();
    }
    function test_ID() {
        $this->assertInternalType("int", $this->post_id);
    }
    
    在wordpress开发/测试/phpunit/包含/功能中添加了这两行。php

      require_once(\'src/wp-content/themes/THEMENAME/include/PostType.php\');
      require_once(\'src/wp-content/themes/THEMENAME/include/Konser.php\');
    
    但是我Call to undefined function get_post() in konsertv-develop/src/wp-content/themes/THEMENAME/include/PostType.php

    你能告诉我我错过了什么吗?

    PostType的内容。php

      <?php
      class PostType
      {
    public $post;
    public $ID;
    
    function PostType($ID) {
        $this->post = get_post($ID);
        $this->ID = $ID;
    }
    function getPost()
    {
        return $this->post;
    }
    function getTarih()
    {
        return get_post_meta($this->ID, "konser_tarih", true);
    }
    function getID()
    {
        return $this->ID;
    }
    
    }

  • 1 个回复
    最合适的回答,由SO网友:J.D. 整理而成

    6.将此2行添加到/wordpress-develop/tests/phpunit/includes/functions.php

    require_once(\'src/wp-content/themes/THEMENAME/include/PostType.php\'); require_once(\'src/wp-content/themes/THEMENAME/include/Konser.php\');

    这就是问题所在。这个get_post() 函数不存在,因为phpunit/includes/functions.php 在加载WordPress之前包含文件。这实际上是它作为一个单独文件存在的部分原因:因此它可以包含在您自己的phpunit引导中(如果您需要,并且需要使用这些函数)。有关如何对插件执行此操作的示例,您可以看到a tutorial I\'ve written.

    然而,在您的情况下,您正在测试一个主题,并且您的测试套件不够复杂,不足以保证自己的引导。实际上,你的第三步是define( \'WP_DEFAULT_THEME\', \'THEMENAME\' );wp-tests-config.php 应该足够了。你的两个文件requireing将自动加载为主题的一部分。(是的,主题在单元测试期间加载。)

    所以你的错误是第6步。这是没有必要的。

    结束

    相关推荐

    Admin Theme customization

    我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register