Comment construisez-vous des tests unitaires avec PHPUnit et le framework de test WordPress qui simule être dans la boucle? Par exemple, si je veux tester une fonction qui ne peut être appelée que dans la boucle car elle suppose que les données de publication sont configurées correctement pour la requête principale, comment pourrais-je construire ce test unitaire?
En supposant que vous utilisez WP_UnitTestCase, essayez ceci dans votre classe de test:
private $post_id;
// use the factory to create a post with some fake data
public function setUp() {
parent::setUp();
$this->post_id = $this->factory()->post->create(
array ( 'post_content' => 'Here are some words. <img src="image.jpg"> <!--more--> And here are some more' )
);
}
public function test_a_thing() {
// fake going to the URL
$this->go_to( get_permalink( $this->post_id ) );
// make sure your relevant globals are set
global $post;
setup_postdata($post);
// profit
$yourthing->function_you_test();
}
La clé pour cela est la méthode go_to
de la classe WP_UnitTestCase
que vous devriez étendre. Il simule l'analyse d'une URL par rapport à la racine wordpress (IIRC). Vous devrez peut-être d’abord définir les publications et d’autres informations, puis appeler go_to
pour déclencher la boucle.
Les fonctions de plug-in de test unitaire dans Wordpress sont extrêmement difficiles. Il est généralement plus facile de faire un test d'acceptation ou fonctionnel. La différence est que dans un test unitaire, vous devez vous moquer de tout ce avec quoi vous interagissez. Dans un test fonctionnel, vous pouvez exécuter le système entier. Par exemple, j'utilise Codeception pour lancer un navigateur et tester le système dans son ensemble. Les opinions varient, mais je pense que le concept entier de tests unitaires d'un plug-in WP est fous. Le plugin n'existe pas en vase clos. C'est un système qui interagit avec un autre système. Quel est le but d'essayer même d'isoler? BTW - Presque pas de développeurs réellement tester de cette façon. L'état de WP framework de test est SORRY.