He estado buscando una respuesta a este problema durante horas en Google y en otros sitios sin suerte. He creado algunas pruebas de unidad para mi proyecto de Zend Framework usando PHPUnit. Todo va bien con las pruebas hasta el momento del informe de Cobertura del Código PHPUnit. En este punto me sale el siguiente error:PHPUnit - Informe de Cobertura del Código Generador de Problemas con la aplicación Zend Framework
Generating code coverage report, this may take a moment. Fatal error: Call to a member function pushStack() on a non-object in C:\htdocs\ZendFWTutorials\ZendStorefront\library\SF\Plugin\Action.php on line 32
Este error hace referencia al siguiente bloque de código:
public function
dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
$stack = $this->getStack();
// category menu
$categoryRequest = new Zend_Controller_Request_Simple();
$categoryRequest->setControllerName('category')
->setActionName('index')
->setParam('responseSegment', 'categoryMain');
// push requests into the stack
$stack->pushStack($categoryRequest);
}
public function getStack()
{
if (null === $this->_stack) {
$front = Zend_Controller_Front::getInstance();
if (!$front->hasPlugin('Zend_Controller_Plugin_ActionStack'))
{
$stack = new Zend_Controller_Plugin_ActionStack();
$front->registerPlugin($stack);
} else {
$stack = $front->getPlugin('ActionStack');
}
$this->_stack = $stack;
}
return $this->_stack;
}
Este código es de una biblioteca que no he escrito de manera que probablemente añade complejidad a mi problema porque es menos probable que entienda lo que está pasando. Tampoco sé qué está haciendo la lógica de PHPUnit cuando crea el informe de cobertura del código, por lo que no sé cómo solucionar el problema. Este problema solo ocurre cuando ejecuto PHPUnit y he ejecutado xdebug para rastrear el código en esta función bajo condiciones normales de operación. Tengo la sensación de que PHPUnit entra en una condición donde la variable es nula pero en el funcionamiento normal $ stack y $ categoryRequest no son nulos.
Mi estructura de directorios es la siguiente:
application
----->bootstrap
----->config
----->layouts
----->modules
-------->storefront
-------------->controllers
-------------->forms
-------------->models
-------------->services
-------------->views
build
data
library
----->SF
----->Zend
Public
----->css
----->images
tests
----->application
------------->modules
------------->controllers
------------->models
----TestHelper.php
----phpunit.xml
phpunit.xml es el siguiente:
./application/
<filter> <whitelist> <directory suffix=".php">../application/</directory> <exclude> <directory suffix=".phtml">../application/</directory> <directory suffix=".php">../library/</directory> </exclude> </whitelist> </filter> <logging> <log type="coverage-html" target="./log/report" charset="UTF-8" yui="true" highlight="true" lowUpperBound="50"
highLowerBound="80"/>
TestHelper.php:
<?php // set our app paths and
environments define('BASE_PATH',
realpath(dirname(__FILE__) . '/../'));
define('APPLICATION_PATH', BASE_PATH .
'/application'); define('TEST_PATH',
BASE_PATH . '/tests');
define('APPLICATION_ENV', 'testing');
//include path set_include_path('.' .
PATH_SEPARATOR . BASE_PATH .
'/library' . PATH_SEPARATOR .
get_include_path());
// set the default timezone
date_default_timezone_set('America/Argentina/Buenos_Aires');
require_once 'Zend/Application.php';
$application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/config/store.ini');
$application->bootstrap();
Descubrí el problema en un complemento, lea a continuación para la solución. – rossdh