He estado investigando este problema durante días y, aunque muchas personas me hacen esta pregunta, nunca encontré una respuesta clara y concisa.
Estoy corriendo:
- Unidad de PHP: Versión 3.7.21
- WordPress: Versión 3.5.1
- SO: Ubuntu 11.10
- MySQL: Versión 5.1.69-0ubuntu0.11.10.1
- PHP: Versión 5.3.6-13ubuntu3.10
En pocas palabras, tengo el núcleo básico de wordPress descargado en un directorio de mi computadora. He descargado e instalado con éxito pera y phpunit. Probé phpunit escribiendo pruebas básicas en archivos php simples que funcionaron bien. Mi problema es cuando ejecuto phpunit en un sitio de wordpress (en el que no he cambiado los archivos básicos de WP).
Me sale el error:
"Error fatal de PHP: llamar a una función miembro main () en un no miembro objeto en / < directorio raíz > /functions.php en la línea 779 ".
Este error corresponde a este segmento de código:
function wp( $query_vars = '' ) {
global $wp, $wp_query, $wp_the_query;
$wp->main( $query_vars ); // Line 779
if ( !isset($wp_the_query) )
$wp_the_query = $wp_query;
}
Después de un intenso rastreo de Internet, encontré que muchas personas tenían errores en esta línea exacta, así que sé que hay algo general, como una configuración del entorno o nuestro proceso de configuración que nos dio todo este error.
Algunas soluciones que he leído y probado no funcionaron para mí:
- Cambie el archivo requerido en su archivo "index.php".
- Coloque un requerimiento de "load.php" sobre la cabeza en su archivo "index.php".
- Reinstalar WordPress
- Cambie los entornos de correa de arranque y phpunit.
He sido desarrollador web durante 5 años, pero nunca antes había usado WordPress para uno de mis clientes. Una vez que pueda hacer esta configuración, las pruebas unitarias serán fáciles; pero no tengo idea de lo que está causando este problema. Cualquier enlace a guías / tutoriales o explicaciones claras sería muy apreciado. Gracias por tu tiempo.
--EDIT-- El archivo de prueba que estoy ejecutando es:
<?php
//include PHPUnit
require_once('PHPUnit/Autoload.php');
//include the code to be tested
require_once('../index.php');
// extend the PHPUnit class
class StackTest extends PHPUnit_Framework_TestCase {
public function testOne(){
$this->assertTrue(TRUE);
$this->assertEquals(2,2);
$this->assertTrue(1<3);
}
}
?>
No usé ninguna prueba de función específica de WordPress; Acabo de realizar pruebas básicas que funcionan cuando no accedo a la página de inicio de mi sitio de WordPress y fallas cuando lo hago.
También otra nota; Configuré correctamente mi archivo de configuración y mi base de datos. El sitio funciona perfectamente bien, es solo que las pruebas de PHPUnit no pueden ejecutar con éxito los archivos de los sitios web.