Ho cercato una risposta a questo problema per ore in Google e in altri siti senza fortuna. Ho creato alcuni test unitari per il mio progetto Zend Framework usando PHPUnit. Tutto va bene con i test fino al punto del report Copertura del codice PHPUnit. A questo punto ricevo il seguente errore:PHPUnit - Problema di generazione del report di copertura del codice con l'applicazione 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
Questo errore fa riferimento al seguente blocco di codice:
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;
}
Questo codice è da una libreria che non ho scritto in modo che probabilmente aggiunge complessità alla mia problema perché sono meno propensi a capire cosa sta succedendo. Inoltre, non so cosa stia facendo la logica PHPUnit quando crea il report sulla copertura del codice, quindi non so come risolvere il problema. Questo problema si verifica solo quando eseguo PHPUnit e ho eseguito xdebug per tracciare il codice in questa funzione in condizioni operative normali. Ho la sensazione che PHPUnit entri in una condizione in cui la variabile è nullo ma nella normale operazione $ stack e $ categoryRequest non sono nulli.
La mia struttura di directory è la seguente:
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 è la seguente:
./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();
Ho scoperto il problema in un plug-in, leggi sotto per la correzione. – rossdh