it-swarm-ja.com

単体テスト用の画像を追加する方法

wp_get_attachment_image_srcを呼び出す場所で関数をテストする必要があります。テスト用の画像を追加するにはどうすればよいですか。今このメソッドを呼び出すとfalseが返されるためです。

1
toy

WordPressが添付ファイルテストをどのように構築したかを見てみましょう。 tests/phpunit/tests/post/attachments.phpがこのメソッドを使う ことがわかります

function _make_attachment( $upload, $parent_post_id = 0 ) {

    $type = '';
    if ( !empty($upload['type']) ) {
        $type = $upload['type'];
    } else {
        $mime = wp_check_filetype( $upload['file'] );
        if ($mime)
            $type = $mime['type'];
    }

    $attachment = array(
        'post_title' => basename( $upload['file'] ),
        'post_content' => '',
        'post_type' => 'attachment',
        'post_parent' => $parent_post_id,
        'post_mime_type' => $type,
        'guid' => $upload[ 'url' ],
    );

    // Save the data
    $id = wp_insert_attachment( $attachment, $upload[ 'file' ], $parent_post_id );
    wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $upload['file'] ) );

    return $this->ids[] = $id;

}

彼らはまた彼らのテストで サンプル画像 を含めました。以下は、 テストの1つにおいて、_make_attachment()メソッド を呼び出す方法の例です。

function test_insert_image_no_thumb() {

    // this image is smaller than the thumbnail size so it won't have one
    $filename = ( DIR_TESTDATA.'/images/test-image.jpg' );
    $contents = file_get_contents($filename);

    $upload = wp_upload_bits(basename($filename), null, $contents);
    $this->assertTrue( empty($upload['error']) );

    $id = $this->_make_attachment($upload);

    // ...

だからあなたはあなたのテストのために画像をアップロードするためにそのようなものを使うことができるはずです。あなたは自分自身を使うために画像を供給するか、あるいは既に含まれているもののうちの1つを使うことができます。

8
J.D.

あなたがWordPressテストスイート(あなたのテストクラスがWP_UnitTestCaseを拡張する)を使っているなら、あなたは含まれているファクトリを使うことができます。

すなわちテストがtestsディレクトリにある場合は、tests/assets/dummy-attachment.jpgを作成できます。

$post = $this->factory->post->create_and_get();
$attachment_id = $this->factory->attachment->create_upload_object( __DIR__ . '/assets/dummy-attachment.jpg', $post->ID );
2
James