2010-08-19 5 views
2

Est-ce que quelqu'un ici utilise Zend Framework, ZFDoctrine et PHPUnit ensemble? Comment reconstruire la base de données à chaque essai?Configuration ZF, ZFDoctrine et PHPUnit

Comment séparer les environnements locaux/de production/de test?

Souhaitez-vous partager votre configuration de test unitaire?

J'ai essayé quelque chose comme ça:

// /tests/bootstrap.php 
// ... setup paths and constants here 
require_once 'Zend/Application.php'; 
// Create application, bootstrap, and run 
$application = new Zend_Application(
    APPLICATION_ENV, 
    APPLICATION_PATH . '/configs/application.ini' 
); 

$application->bootstrap('doctrine'); 
$provider = new ZFDoctrine_Tool_DoctrineProvider; 
$provider->generateModelsFromYaml(); 
//$provider->buildProject(true); 

Mais se termine dans:

Notice: Constant APPLICATION_PATH already defined in /home/user/www/library/ZendFramework/1.10.7/library/Zend/Tool/Project/Context/Zf/BootstrapFile.php on line 106 

Fatal error: Call to a member function getResponse() on a non-object in /home/user/www/library/zf-doctrine/library/ZFDoctrine/Tool/DoctrineProvider.php on line 271 

Les modèles ne sont pas générés.

Je reçois des erreurs similaires en cours d'exécution:

$provider->createDatabase(); 

Mais dans cette base de données de cas est créé.
Les autres commandes du fournisseur ne fonctionnent pas.


La solution:

$provider = new ZFDoctrine_Tool_DoctrineProvider; 
$registry = new Zend_Tool_Framework_Registry; 
$provider->setRegistry($registry); 
@$provider->buildProject(true); 

Si quelqu'un connaît une meilleure approche, s'il vous plaît me corriger.

+0

Fonctionne très bien, merci! – Daff

Répondre

0

Je n'ai pas utilisé ZFDoctrine, mais simplement Doctrine 1.2. Je ne sais pas si ma solution est mieux, mais je me suis dit que je poste si any1 est intéressé, voici le bootstrap.php dans mon dossier tests:

<?php 

// Define path to application directory 
defined('APPLICATION_PATH') 
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../application')); 

// Define application environment 
/** 
* In the application.ini: 
[testing : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
doctrine.dsn = "mysql://my_user:[email protected]/my_phpunit_test_db" 
*/ 
define('APPLICATION_ENV', 'testing'); 

// Ensure library/ is on include_path 
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'), 
    get_include_path() 
))); 

/** Zend_Application */ 
require_once 'Zend/Application.php'; 

// Create application, bootstrap, and run 
$application = new Zend_Application(
    APPLICATION_ENV, 
    APPLICATION_PATH . '/../configs/application.ini' 
); 

$application->getBootstrap()->bootstrap(); 

// Can run out if too small 
ini_set('memory_limit', '512M'); 

// Get the doctrine settings 
$config = $application->getOption('doctrine'); 
$cli = new Doctrine_Cli($config); 
$cli->run(array("doctrine", "build-all-reload","force")); 

La clé est en fait la dernière ligne ici qui reconstitue toutes les bases création un environnement propre pour chaque test.