2010-10-21 4 views
3

Il s'agit d'une question très spécifique et j'ai beaucoup cherché une solution potentielle mais rien qui me pointe dans la bonne direction. J'ai écrit un Zend_Controller_Action_Helper pour m'aider à traiter certains formulaires dans mon application. Maintenant, dans l'application, cela fonctionne très bien, mais il a l'air d'a cassé mes tests. Si je commente les lignes qui ajoutent l'aide dans le courtier, tout fonctionne bien, mais cela détruit l'objet. L'erreur que je reçois estZend Framework, HelperBroker Test PHPUnit

Fatal error: Class 'PHPUnit_Framework_Error_Notice' not found in /Users/chris/NetBeansProjects/myProject/library/ProcessForm.php on line 25

Ce que je ne comprends pas pourquoi il jette cette erreur sur la ligne 25 qui est spécifiquement

public function processForm($aParam)

Je suppose que je devrais coller un code pour vous montrer une partie de l'application. J'ajoute cette aide dans le bootstrap de mon application comme si ..

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initHelpers() 
    { 
     // If I comment out these lines it all works 
     require_once 'ProcessForm.php'; 
     Zend_Controller_Action_HelperBroker::addHelper(
      new ProcessForm() 
     ); 
    } 
} 

Mon PHPUnit fichier d'amorçage ressemble à ceci

require_once 'Zend/Application.php'; 
require_once 'Zend/Test/PHPUnit/ControllerTestCase.php'; 

abstract class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase 
{ 

    protected $application; 

    public function setUp() 
    { 
     $this->bootstrap = array($this, 'appBootstrap'); 
     parent::setUp(); 
     $this->getFrontController()->setParam('bootstrap', $this->application->getBootstrap()); 
    } 

    public function appBootstrap() 
    { 
     $this->application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini'); 
     $this->application->bootstrap(); 
    } 


} 

L'aide réelle ressemble à ceci

class ProcessForm extends Zend_Controller_Action_Helper_Abstract 
{ 
    /** 
    * @var Zend_Loader_PluginLoader 
    */ 
    public $pluginLoader; 

    /** 
    * Constructor: initialize plugin loader 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->pluginLoader = new Zend_Loader_PluginLoader(); 
    } 

    public function processForm($aParam) 
    { 
    } 

    public function direct($aParam) 
    { 
     return $this->processForm($aParam); 
    } 
} 
+0

2 suggestions: Comme il semble qu'il ne peut pas trouver 'PHPUnit_Framework_Error_Notice', avez-vous vérifié si le fichier est présent? (Zend/Test/PHPUnit/Framework/Erreur/Notice.php) et l'erreur semble provenir du constructeur ProcessForm. Donc, peut-être dans l'autre classe '$ this-> pluginLoader = nouveau Zend_Loader_PluginLoader();' – Shikiryu

+0

Il n'existe pas sur le chemin que vous suggérez mais il fait partie de PHPUnit qui est dans le chemin – Catharsis

Répondre

1

I trouvé le problème, la solution s'avère que (je pense que c'est une chose php 5.3) si je renommer la fonction principale à quelque chose d'autre, il semble fonctionner. Par exemple.

class ProcessForm extends Zend_Controller_Action_Helper_Abstract 
{ 
    /** 
    * @var Zend_Loader_PluginLoader 
    */ 
    public $pluginLoader; 

    /** 
    * Constructor: initialize plugin loader 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->pluginLoader = new Zend_Loader_PluginLoader(); 
    } 

    public function doThis($aParam) 
    { 
    } 

    public function direct($aParam) 
    { 
     return $this->doThis($aParam); 
    } 
} 

Je pense c'est parce que en php 5.3 vous êtes autorisé à construire votre classe avec soit __construct ou myClass mais cette fonctionnalité est maintenant dépréciés si je ne me trompe pas.

Questions connexes