web-dev-qa-db-fra.com

PHPUnit teste le plugin WordPress

En utilisant les réponses de ce site et d'autres ressources, j'ai commencé à écrire mon prochain plugin en utilisant les tests PHPUnit et l'environnement de test WordPress. Distiller ce que j'ai dans le bootstrap.php de mon plugin:

define( 'WP_TESTS_DIR', 'pathToMyWordPressTestsFromSVN');
define( 'TEST_PLUGIN_FILE', 'pathToMyPlugin/myPlugin.php' );
require_once WP_TESTS_DIR . 'includes/functions.php';
require WP_TESTS_DIR . 'includes/bootstrap.php';

function _manually_load_plugin() {
    require TEST_PLUGIN_FILE;
    if(is_plugin_active(TEST_PLUGIN_FILE)){
        echo "PLUGIN IS LOADED AND WORKING!!!!";
    }
}
tests_add_filter( 'muplugins_loaded', '_manually_load_plugin' );

// Normally you'd find "require WP_TESTS_DIR . 'includes/bootstrap.php';" down here...

Dans pratiquement tous les exemples, l’environnement de test WordPress bootstrap.php est chargé en dernier.

Cela semble étrange, car si je le charge plus tôt, j’ai accès à des fonctions telles que is_plugin_active qui, j’imagine, seront utiles pour tester des plugins nécessitant d’autres ... et se retirer si les exigences ne sont pas chargées pour une raison quelconque.

Y at-il une raison pour que l'environnement de test est amorcé à la fin ... autre que l'habitude/convention?

5
Matthew Bakaitis

La raison pour laquelle le bootstrap de test WordPress est chargé à la fin est précisément parce qu'il charge WordPress :

// Load WordPress
require_once ABSPATH . '/wp-settings.php';

Si vous n'accrochez pas votre fonction pour charger votre plugin dans 'muplugins_loaded' avant , y compris l'amorçage, votre plugin ne sera pas chargé avec WordPress. Dans la plupart des cas, cela signifie que votre plug-in ne sera pas configuré correctement (par exemple, 'init' aura déjà été déclenché avant que les fonctions de votre plug-in ne soient connectées).

En ce qui concerne la vérification des dépendances, vous pouvez probablement le faire en vous connectant à l'action 'plugins_loaded':

function _check_for_dependencies() {
    if ( ! is_plugin_active( 'some-plugin/some-plugin.php' ) ) {
        exit( 'Some Plugin must be active to run the tests.' . PHP_EOL );
    }
}
tests_add_filter( 'plugins_loaded', '_check_for_dependencies' );

Ou, vous pouvez simplement laisser le chargement d'amorçage de WordPress se terminer et vérifier vos dépendances après.

8
J.D.