it-swarm-ja.com

Wpユニットテストで自分のクラスを使う

(私はコードサンプルのスタイルの問題を解決しようとしています)

私はテーマを開発していますが、このテーマのために開発されたクラスがいくつかあります。私のテーマで単体テストを実行したいです。

私はこの手順に従った:

  1. 私のルートWebフォルダへのテストレポをチェックアウトしました:

    svn co http://develop.svn.wordpress.org/trunk/ wordpress-develop
    
  2. テーマフォルダをwordpress-Develop/src/wp-content/themesにコピーしました

  3. 空のデータベースを作成し、wp-tests-config.phpファイルを設定します。この行をwp-tests-config.phpにも追加しました。

    define( 'WP_DEFAULT_THEME', 'THEMENAME' );
    
  4. この内容でwordpress-Develop/tests/phpunit/tests/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

  5. しかし、私は自分のKonserクラスとPostTypeクラスを使いたいのです。

    function setUp() {
    
       $this->post_id = new Konser(410);
       parent::setUp();
    }
    function test_ID() {
        $this->assertInternalType("int", $this->post_id);
    }
    
  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');
    
  7. しかし、私はkonsertv-Develop/src/wp-content/themes /テーマ名/ include/PostType.phpで未定義の関数get_post()を呼び出しています

あなたが私が欠けているものを私に言うことができますか?

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
Eray

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');

それが問題だ。 WordPressがロードされる前にphpunit/includes/functions.phpファイルが含まれているため、get_post()関数は存在しません。それは実際にはそれが別のファイルとして存在する理由の一部です:それであなたはそれをあなた自身のphpunitブートストラップに含めることができます(もしあなたがそれを必要としそしてそれらの機能を使う必要があるなら)。これがプラグインに対してどのように行われるかの例として、 私が書いたチュートリアル を見ることができます。

しかし、あなたのケースでは、あなたはテーマをテストしています、そしてあなたのテストスイートはそれ自身のブートストラップを保証するほど複雑ではありません。実際には、wp-tests-config.phpdefine( 'WP_DEFAULT_THEME', 'THEMENAME' );を追加するという3番目のステップで十分です。あなたがrequireingしている2つのファイルは自動的にあなたのテーマの一部としてロードされます。 (はい、テーマはユニットテスト中に読み込まれます。)

だからあなたの過ちはステップ6でした。それは必要ではありません。

0
J.D.