web-dev-qa-db-ja.com

単体テストのためにWordpressでコンテンツを設定する方法

データセットに保存されたエントリに基づいてショートコードをコンテンツに変換するワードプレスプラグインを作成しました。

    global $wpdb;

    $post_id = get_the_ID();
    $post_content = get_the_content();

    $pattern = '/\[zam_tweets page=([0-9])\]/';
    preg_match($pattern, $post_content, $matches);

    if(!empty($matches)){

        $tweets_table = $wpdb->prefix . 'zam_tweets';
        $result = $wpdb->get_var("SELECT Tweet FROM $tweets_table WHERE post_id = '$post_id'");
        $content = $result;
    }

    return $content;

私の問題は、get_the_ID()メソッドを使用するときに実際の投稿IDを取得できるように、どのようにコンテキストを特定の投稿のコンテキストに設定するかです。これは私がこれと一緒に行くことになっているかどうか私は引数としてそれらを指定する必要があるのですか?

1
soul

PhpUnit がWPプラグイン のテスト用に設定されている場合は、次のようなテストケースを使用できます。

あなたのplugin-directory/tests/Some_Test_Case.phpに:

class Plugin_Test extends WP_UnitTestCase {
    /**
     * @dataProvider post_IDs_and_expected_results
     */
    public function test_something( $post_id, $expected_result ) {
        global $post;
        $post = get_post( $post_id );
        $plugin_content = call_plugin_function(); // Your function name here
        $this->assertEquals( $expected_result, $plugin_content, "Content OK for post $post_id" );
    }
    public function post_IDs_and_expected_results() {
        return array(
            array( 1, 'expected result for post_id = 1' ),
            array( 2, 'expected result for post_id = 2' )
        );
    }

}

プラグインのディレクトリにあるコマンドライン:phpunit ./tests/Some_Test_Case.php

2
P_Enrique