Je veux écrire des tests unitaires pour un plugin. J'ai utilisé WP-CLI pour échafauder l'instance de test WordPress et je peux exécuter des tests avec succès.
Le plugin pour lequel j'écris des tests unitaires est un plugin spécifique à un site plutôt qu'un plugin autonome destiné au référentiel wordpress.org. S'agissant d'un plug-in spécifique à un site, certaines fonctions utilisent des fonctions fournies par d'autres plug-ins, tels que Champs personnalisés avancés.
Question : Comment puis-je installer et charger des plugins supplémentaires sur le site échafaudé WP-CLI lors du test du plugin spécifique à mon site?
J'ai examiné le fichier bin/install-wp-test.sh
en espérant pouvoir ajouter d'autres commandes wp-cli pour installer et activer les plug-ins requis, mais ce script ne semble pas utiliser wp-cli pour créer l'instance de test WordPress.
J'ai également essayé de mettre à jour les fonctions _manually_load_plugin
dans le fichier tests/bootstrap.php
avec le code suivant, mais cela n'a eu aucun effet.
/**
* PHPUnit bootstrap file
*
* @package Site Specific Plugin
*/
$_tests_dir = getenv( 'WP_TESTS_DIR' );
if ( ! $_tests_dir ) {
$_tests_dir = '/tmp/wordpress-tests-lib';
}
// Give access to tests_add_filter() function.
require_once $_tests_dir . '/includes/functions.php';
/**
* Manually load the plugin being tested.
*/
function _manually_load_plugin() {
require dirname( dirname( __FILE__ ) ) . '/battingforchange.php';
// Update array with plugins to include ...
$plugins_to_active = array(
'advanced-custom-fields-pro/acf.php'
);
update_option( 'active_plugins', $plugins_to_active );
}
tests_add_filter( 'muplugins_loaded', '_manually_load_plugin' );
// Start up the WP testing environment.
require $_tests_dir . '/includes/bootstrap.php';
Ce que vous essayez de faire n’est pas un test unitaire, mais un test d’intégration, et comme l’intégration nécessite généralement une initialisation spécifique du plug-in concerné, il est difficile de donner une réponse générale, ce qui est plus évident que "inclure le fichier du plugin".
L’idée des tests unitaires est de vérifier que vos API font ce qu’elles sont supposées faire. L’hypothèse de base devrait être que les API externes fonctionnent correctement, sinon le nombre de tests que vous devrez écrire n’est pas limité.
Une fois que vous supposez que les API externes fonctionnent correctement, cela ne change rien si vous les appelez ou écrivez simplement une fonction du même nom qui imite simplement leur comportement.
Comme exemple à l'idée. Dans un plugin, j’écris, il existe plusieurs paramètres contrôlant l’argument appelé WP_Query
. Pour tester cela, je vérifie simplement le tableau d'arguments résultant sans me préoccuper d'appeler WP_Query
.
L'environnement de test généré par WP-CLI est conçu pour tester à l'unité un seul plug-in, et non pour effectuer des tests d'intégration, comme indiqué par Mark Kaplun .
Cependant, en suivant ce post sur Thèmes de tests unitaires et plug-ins dans WordPress , vous pouvez charger des thèmes et des plug-ins supplémentaires pour effectuer des tests d'intégration plus vastes.