web-dev-qa-db-fra.com

Utilisation de mes propres cours sur les tests unitaires Wp

(J'essaie de résoudre les problèmes de style des exemples de code)

Je développe un thème mais certains cours ont été développés pour ce thème. Je veux exécuter des tests unitaires sur mon thème.

J'ai suivi ces étapes:

  1. Extrait du rapport de test dans mon dossier Web racine:

    svn co http://develop.svn.wordpress.org/trunk/ wordpress-develop
    
  2. Copié mon dossier de thème dans wordpress-develop/src/wp-content/themes

  3. Création d'une base de données vide et configuration du fichier wp-tests-config.php . Également ajouté cette ligne à wp-tests-config.php

    define( 'WP_DEFAULT_THEME', 'THEMENAME' );
    
  4. Créé wordpress-develop/tests/phpunit/tests/konser.php fichier avec ce contenu:

    <?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. Mais je veux utiliser mes classes Konser et PostType.

    function setUp() {
    
       $this->post_id = new Konser(410);
       parent::setUp();
    }
    function test_ID() {
        $this->assertInternalType("int", $this->post_id);
    }
    
  6. Ajout de ces 2 lignes à /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. Mais je reçois Appel de la fonction non définie get_post () dans konsertv-develop/src/wp-content/themes/THEMENAME/include/PostType.php

Pouvez-vous me dire ce que je manque?

CONTENU DE 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 Ajout de ces 2 lignes à /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');

C'est le problème. La fonction get_post() n'existe pas, car le fichier phpunit/includes/functions.php est inclus avant le chargement de WordPress. C'est en partie la raison pour laquelle il existe en tant que fichier séparé: il peut donc être inclus dans votre propre bootstrap phpunit (si vous en avez besoin, et devez utiliser ces fonctions). Pour un exemple de la façon dont cela est fait pour les plugins, vous pouvez voir un tutoriel que j'ai écrit .

Cependant, dans votre cas, vous testez un thème et votre suite de tests n'est pas assez complexe pour justifier son propre bootstrap. En fait, votre troisième étape, en ajoutant define( 'WP_DEFAULT_THEME', 'THEMENAME' ); au wp-tests-config.php devrait suffire. Les deux fichiers que vous avez requireing seront automatiquement chargés dans votre thème. (Oui, le thème est chargé lors des tests unitaires.)

Donc, votre erreur était l'étape 6. Ce n'est pas nécessaire.

0
J.D.