2009-03-17 5 views
4

Quelqu'un at-il réussi à configurer Zend_Test? Quelle était votre méthode/approche et comment exécutez-vous vos tests/suites de tests?Zend Framework: Premiers pas avec Zend_Test

J'ai déjà PHPUnit installé et fonctionne. Maintenant, j'essaie d'écrire quelques tests de contrôleurs simples. La documentation de Zend Framework suppose que le chargement automatique est configuré, ce que je n'ai pas fait. Quelle méthode font vous utiliser pour charger automatiquement les fichiers appropriés? Je le fais dans mon fichier bootstrap normal, mais je ne veux pas encombrer mon test avec un tas d'inclusions et de configuration de chemins. Est-ce qu'une classe de cas de test de contrôleur abstrait serait la voie à suivre?

Qu'en est-il du plugin bootstrap comme la documentation l'utilise ... est-ce ainsi que vous faites vos tests, ou aimez-vous le faire différemment? Je voudrais réutiliser autant de fichier bootstrap que possible. Comment dois-je sécher mon bootstrap pour les tests et l'utilisation normale?

Voici mon test jusqu'à présent:

<?php 

class IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase 
{ 
    public function setUp() 
    { 
     $this->bootstrap = array($this, 'appBootstrap'); 
     parent::setUp(); 
    } 

    public function appBootstrap() 
    { 
     $this->frontController->registerPlugin(new Bootstrapper('testing')); 
    } 

    public function testIndexAction() 
    { 
     $this->dispatch('/index'); 
      $this->assertController('index'); 
      $this->assertAction('index'); 
    } 

} 

//straight from the documentation 
class Bootstrapper extends Zend_Controller_Plugin_Abstract 
{ 
    /** 
    * @var Zend_Config 
    */ 
    protected static $_config; 

    /** 
    * @var string Current environment 
    */ 
    protected $_env; 

    /** 
    * @var Zend_Controller_Front 
    */ 
    protected $_front; 

    /** 
    * @var string Path to application root 
    */ 
    protected $_root; 

    /** 
    * Constructor 
    * 
    * Initialize environment, root path, and configuration. 
    * 
    * @param string $env 
    * @param string|null $root 
    * @return void 
    */ 
    public function __construct($env, $root = null) 
    { 
     $this->_setEnv($env); 
     if (null === $root) { 
      $root = realpath(dirname(__FILE__) . '/../../../'); 
     } 
     $this->_root = $root; 

     $this->initPhpConfig(); 

     $this->_front = Zend_Controller_Front::getInstance(); 
    } 

    /** 
    * Route startup 
    * 
    * @return void 
    */ 
    public function routeStartup(Zend_Controller_Request_Abstract $request) 
    { 
     $this->initDb(); 
     $this->initHelpers(); 
     $this->initView(); 
     $this->initPlugins(); 
     $this->initRoutes(); 
     $this->initControllers(); 
    } 

    // definition of methods would follow... 
} 

Que dois-je faire?

Répondre

3

Voici ce que je l'ai fait pour le faire fonctionner:

D'abord, nous devons résoudre le problème de l'auto-chargement. Nous le ferons en créant un fichier que tous les tests incluront et le placerons dans le répertoire de tests. Note: J'ai copié tout cela à partir de mon /public/index.php. Deuxièmement, nous devons inclure ce fichier dans notre test. Notre fichier de test est dans/tests/application/controllers /. Je ne vais pas utiliser mon bootstrap comme plugin puisque mon fichier bootstrap fonctionne de la même manière que le QuickStart tutorial. Je vais simplement créer un lien en définissant l'emplacement comme le bootstrap public $. Lorsque Zend_Test_PHPUnit_ControllerTestCase construit, il recherchera le fichier bootstrap que nous avons défini ici.

<?php 

require_once '../../loader.php'; 

class IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase 
{ 
    public $bootstrap = '../../../application/bootstrap.php'; 

    public function testIndexAction() 
    { 
     $this->dispatch('/index'); 
     $this->assertController('index'); 
     $this->assertAction('index'); 
    } 

} 

Et c'est tout! Si mon fichier bootstrap était déjà un plugin, cela pourrait être un peu plus compliqué, mais comme ce n'est pas le cas, c'est super facile.

0

J'utilise toujours un simple TestHelper.php qui fait des choses d'initialisation de base. Ce fichier est inclus dans chaque fichier de test. Une des choses que je fais, est d'enregistrer l'autochargeur Zend Framework car j'ai rencontré des problèmes de dépendances majeurs, en particulier lors de l'utilisation de filtres, de validateurs et de formulaires. Il est presque impossible de garder une trace de tous les fichiers requis et de les inclure manuellement dans les cas de test.

Vous pouvez peut-être déplacer l'initialisation du chargement automatique et la configuration des chemins d'inclusion dans votre plug-in bootstrapping car cette procédure devrait être la même pour l'application réelle.

1

Au lieu d'utiliser

require_once "Zend/Loader.php"; 
Zend_Loader::registerAutoload(); 

changement dans

require_once 'Zend/Loader/Autoloader.php'; 
Zend_Loader_Autoloader::getInstance(); 

registerAutoload() est obsolète 1.8.0