Où puis-je trouver de la documentation pour les classes d'usine WP_UnitTestCase?


21

Dans les versions récentes WP_UnitTestCasea inclus une $factorypropriété.

Par exemple:

$post = $this->factory->post->create();

Où puis-je trouver de la documentation sur cette fonctionnalité utile?

Réponses:


26

Pour autant que je sache, il n'y a pas de documentation pour le moment. La source officielle est ici .

J'ai également écrit un tutoriel sur les tests unitaires des plugins WordPress, qui donne quelques détails sur cette fonctionnalité .

L'un des avantages de l'utilisation WP_UnitTestCaseest ses usines. Ceux-ci sont accessibles via la factoryvariable membre. L' factoryest un objet avec des propriétés qui sont chacune un exemple de l' une des classes définies dans includes / factory.php . Que font-ils, demandez-vous? Ils facilitent la création d'utilisateurs, de publications, de termes, etc., partout où vous en avez besoin dans votre test. Donc, au lieu de faire ça:

$args = array( /* A bunch of user data you had to make up */ );
wp_insert_user( $args );

Vous pouvez simplement faire ceci:

$user_id = $this->factory->user->create();

Mais attendez, ça va encore mieux. Et si vous avez besoin de nombreux utilisateurs (ou publications, ou autre)? Vous pouvez simplement les créer en vrac comme ceci:

$user_ids = $this->factory->user->create_many( 25 );

Cela créera 25 utilisateurs que vous pourrez utiliser dans votre test.

Le factorypossède les propriétés suivantes que vous pouvez utiliser:

  • $post
  • $attachment
  • $comment
  • $user
  • $term
  • $category
  • $tag
  • $blog

Ils peuvent tous être utilisés de la même manière que démontré dans l'exemple ci-dessus avec l' $userusine. Par exemple, vous pouvez créer un article comme celui-ci:

$this->factory->post->create();

Vous pouvez également spécifier des arguments particuliers à utiliser pour créer l'objet. Dans l'exemple ci-dessus, nous avons créé une publication, mais elle n'a pas été affectée à un utilisateur particulier (le post_authorchamp sera défini par défaut sur 0). Parfois, nous souhaitons que le message soit attribué à un utilisateur à la place. Nous ferions cela comme ceci:

$user_id = $this->factory->user->create();
$post_id = $this->factory->post->create( array( 'post_author' => $user_id ) );

De plus, si vous avez besoin de plus que l'ID de l'objet que vous créez, vous n'avez pas besoin de le faire:

$post_id = $this->factory->post->create();
$post = get_post( $post_id );

Utilisez plutôt la create_and_get()méthode:

// $post will be an instance of WP_Post 
$post = $this->factory->post->create_and_get();

Dans cet exemple, nous avons utilisé l' postusine, mais il en va de même pour toutes les usines.

Je pense que je vais le mentionner à l'équipe des documents WordPress. Peut-être pouvons-nous intégrer ces informations dans les manuels des plugins et des thèmes.

Mise à jour (20 juin 2015): Vous pouvez également créer vos propres usines personnalisées !

Mise à jour (27 septembre 2016): Dans WordPress 4.4, les tests ont été mis à jour pour fournir une factory()méthode statique d'accès aux usines, bien que la factorypropriété soit toujours fournie via un getter magique.


Le domaine est mort, tout comme le lien vers le didacticiel. At-il été déplacé?
Josh Habdas

@JoshH Il semble être de retour maintenant. Vous l'avez probablement touché alors que le site exécutait une sauvegarde au milieu de la nuit (mon fuseau horaire).
JD

@JoshH Je ne connais aucun framework de tests unitaires utilisant du code procédural pour les tests. Je doute vraiment qu'un cadre de test procédural fonctionnerait presque aussi bien qu'un OO de toute façon, simplement en raison de la façon dont il doit fonctionner. Cependant, ce n'est pas parce que les tests sont construits sur un framework orienté objet comme PHPUnit qu'ils peuvent uniquement tester le code OO. J'ai beaucoup de code procédural mes plugins, et le tester exactement de la même manière. WordPress teste également de nombreux codes procéduraux de cette façon. Cela ne devrait donc poser aucun problème.
JD

Merci @JD J'aimerais idéalement écrire mes tests de cette manière aussi. Mais je soumettrai à OOP étant donné que ce n'est pas dans la ligne de code principale. PS J'ai essayé de soumettre un commentaire sur votre blog et j'ai reçu une erreur. squinty face Peu importe, merci pour le 411.
Josh Habdas

1
@JoshH Merci pour les avertissements concernant le problème avec les commentaires, cela devrait être corrigé maintenant. Cela a été causé par un plugin anti-spam trop zélé.
JD

2

Le code source sur

https://github.com/rnagle/wordpress-unit-tests/blob/master/includes/factory.php

semble être le meilleur endroit pour regarder en ce moment


2
Supprimez simplement le lien de votre question: que liriez-vous? Veuillez toujours écrire des réponses qui ne dépendent pas de sources externes. Sinon, nous devons supprimer votre réponse.
kaiser

2
@kaiser, je vois d'où tu viens, mais la réponse à ma question sera un lien. Vous ne vous attendez sûrement pas à ce que quelqu'un poste toute la documentation ici?
djb

2
Oui, nous nous attendrions à ce que quelqu'un poste tout le code pertinent ici. Ceci est même écrit dans la FAQ du site - "Citez toujours la partie la plus pertinente d'un lien important, au cas où le site cible serait inaccessible ou se déconnecterait définitivement." Ce n'est peut-être pas tout le contenu de la ressource liée, mais dans ce cas, cela peut l'être. En l'état, lorsque cette ressource GitHub devient inaccessible, cette réponse perd tout son sens.
s_ha_dum
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.