(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:
Extrait du rapport de test dans mon dossier Web racine:
svn co http://develop.svn.wordpress.org/trunk/ wordpress-develop
Copié mon dossier de thème dans wordpress-develop/src/wp-content/themes
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' );
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!='');
}
}
}
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);
}
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');
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;
}
}
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 require
ing 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.