web-dev-qa-db-fra.com

Comment ajouter une image pour les tests unitaires?

Je dois tester la fonction où il appelle wp_get_attachment_image_src. Comment puis-je ajouter une image à tester, car pour le moment, si j'appelle cette méthode, elle retourne false.

1
toy

Je voudrais regarder comment WordPress a construit leurs tests de pièces jointes. Vous constaterez que tests/phpunit/tests/post/attachments.php ils utilisent cette méthode :

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;

}

Ils ont également inclus des exemples d’images dans leurs tests. Voici un exemple de la façon dont ils appellent la méthode _make_attachment() dans l'un de leurs tests:

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

    // ...

Vous devriez donc pouvoir utiliser quelque chose comme ça pour télécharger une image pour votre test. Vous pouvez fournir l'image à utiliser vous-même ou simplement utiliser l'un de ceux déjà inclus.

8
J.D.

Si vous utilisez la suite de tests WordPress (vos classes de tests étendent WP_UnitTestCase), vous pouvez utiliser la fabrique fournie.

C'est à dire. si vos tests sont dans un répertoire tests, vous pouvez créer 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