web-dev-qa-db-fra.com

Comment initialiser quelque chose dans le test unitaire avant d'appeler le hook d'initialisation?

J'ai une simple unité PHP écrite pour WordPress et je veux le code d'initialisation avant l'action principale "init" appelée depuis le plug-in que je veux tester, par exemple.

class MyPlugin_Test_Example extends WP_UnitTestCase {

    public static function setUpBeforeClass()
    {

        error_log('setUpBeforeClass');

    }
...

Par exemple, j'ai déjà placé une instruction de journal dans la variable setUpBeforeClass, mais elle est toujours appelée après l'action 'init' de mon plugin.

Supposons que l'action init de mon plugin ait besoin de vérifier, est-il possible de me laisser tester le code faux de toute façon?

1
Yoga

Ce que vous avez découvert, c'est que WordPress est chargé - et toutes les actions sont appelées - avant l'exécution des tests. Il est possible de lier une action lorsque WordPress est chargé, mais cette opération doit être effectuée à partir de votre fichier d'amorçage PHPUnit et non à partir de la classe testcase. Je ne sais pas à quoi ressemble votre fichier bootstrap, je vais donc supposer qu'il s'agit de quelque chose de similaire à celui de ce tutoriel . La principale chose à faire est de charger le fichier contenant les fonctions d’aide PHPUnit de WordPress (tests/phpunit/includes/functions.php). Vous devrez inclure ce fichier car il contient la fonction tests_add_filter(). Et c'est la fonction que vous pouvez utiliser pour vous connecter à init, comme ceci:

tests_add_filter( 'init', 'my_function_to_call' );

La fonction fonctionne de la même manière que les fonctions add_filter() ou add_action(). Cependant, vous ne pouvez pas utiliser add_action(), car WordPress n'a pas encore été chargé et, par conséquent, ces fonctions ne sont pas disponibles. Et comme vous l'avez découvert, vous ne pouvez pas attendre que WordPress soit chargé pour relier votre fonction, car il sera alors trop tard. C'est pourquoi la fonction tests_add_filter() existe: vous pouvez donc vous connecter à WordPress avant qu'il ne soit chargé pour les tests.

2
J.D.