Pregunta:
Actualmente estoy configurando pruebas unitarias para mi complemento. En mi archivo tests / phpunit / bootstrap.php tengo:
require_once $wp_tests_dir . '/includes/functions.php';
tests_add_filter( 'muplugins_loaded', function() {
require /can/this/be/anywhere/on/my/filesystem/myplugin/myplugin.php
} );
// Start up the WP testing environment
require_once $wp_tests_dir . '/includes/bootstrap.php';
Como puede ver, necesito el archivo principal de mi complemento dentro de una función conectada a muplugins_loaded
antes de iniciar el entorno de prueba de WP.
Mi pregunta
¿Myplugin / myplugin.php debe estar en el directorio wp-content / plugins de la instalación de pruebas de WordPress o puede estar ubicado en cualquier lugar de mi sistema de archivos?
Respuesta:
TL; DR
Puede estar en cualquier parte del sistema de archivos.
(Pero consulte la actualización a continuación para obtener una herramienta que lo ayudará a hacer esto de manera aún más realista).
Explicación
El complemento puede estar en cualquier parte del sistema de archivos, dependiendo de si su complemento tiene una función de instalación y cómo desea ejecutarla.
Si su complemento crea tablas de base de datos o guarda opciones predeterminadas en la base de datos en la activación, entonces simplemente cargar su complemento de esa manera no hará que se instale, por lo que es probable que su complemento no funcione correctamente. Entonces, además de cargar el complemento, también debe instalarlo.
La forma en que WordPress hace esto es usando la función activate_plugin()
, que llamará al gancho de activación del complemento que se registró con register_activation_hook()
.
Sin embargo, activate_plugin()
valida que el complemento existe en la carpeta wp-content/plugins
, por lo que si instala el complemento de esa manera, tendrá que tener su complemento (o un enlace simbólico a él) en el directorio de complementos.
Esto es una molestia, por lo que normalmente no uso activate_plugin()
para instalar el complemento. En su lugar, llamo a cualquier función que haya registrado con register_activation_hook()
directamente. Puede que esto no sea lo ideal, pero no he experimentado efectos secundarios no deseados.
Entonces tendrías algo como esto:
tests_add_filter( 'muplugins_loaded', function() {
require '/path/to/plugin/anywhere/on/filesystem/myplugin/myplugin.php'
my_plugin_install_function();
} );
Por supuesto, si su complemento no tiene una función de instalación, este punto es discutible y probablemente no tenga que preocuparse por activar / instalar el complemento en absoluto. Simplemente cárguelo desde cualquier lugar del sistema de archivos y sus pruebas deberían funcionar bien.
Pruebas de WebDriver
Tenga en cuenta que puede (probablemente debería ) llegar un momento en el que desee ejecutar pruebas de aceptación para su complemento. Dependiendo de cómo decida hacer esto, necesitará tener su complemento realmente activado en el sitio que está visitando el navegador WebDriver.
WP Browser ofrece varias opciones para hacer esto con PHPUnit a través de Codeception. Ninguna de las opciones que ofrece actualmente carga el complemento en el lado de las pruebas además del lado del cliente / remoto, por lo que el sitio que se usa en las pruebas de WebDriver está completamente desacoplado del que se usa en las pruebas unitarias. (Sin embargo, actualmente estoy trabajando en un enfoque híbrido que usa el mismo sitio y se carga en el lado de las pruebas mientras ejecuto las pruebas de WebDriver).
Actualización de noviembre de 2016
Aunque todo lo que dije anteriormente sigue siendo cierto, y cargar el complemento de esta manera no ha causado ningún problema, recientemente decidí buscar un mayor realismo en la forma en que se carga e instala el complemento durante las pruebas unitarias. Con este fin, he creado una pequeña biblioteca llamada WPPPB , o el complemento de WordPress PHPUnit Bootstrap. Al usarlo, cargar su complemento es tan simple como esto:
$loader = WPPPB_Loader::instance();
$loader->add_plugin( 'my-plugin/my-plugin.php' );
$loader->load_wordpress();
Esto es engañosamente simple, ya que detrás de escena, el complemento se activa de forma remota , antes de que se cargue WordPress, de modo que pueda ser cargado por WordPress exactamente como lo haría normalmente "en la vida real". Esto requiere que tenga un enlace simbólico al complemento en la carpeta de complementos, pero la biblioteca incluye un script que configurará todo automáticamente. (Consejo profesional: WPPPB también incluye herramientas para ayudarlo a probar la desinstalación / instalación del complemento de manera muy realista).