Question

Quelqu'un utilise-t ici Zend Framework, ZFDoctrine et PHPUnit ensemble?

Comment reconstruire la base de données sur chaque essai? Comment séparer local / production / environnement test?

voulez-vous partager votre configuration de test unitaire?

Je l'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 cela 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 est créée cas.
Les autres commandes de 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.

Était-ce utile?

La solution

Je n'ai pas utilisé ZFDoctrine, mais tout 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 mes tests dossier:

<?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:passwd@localhost/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é ici est en fait la dernière ligne qui reconstruit toutes les bases de données en créant un environnement propre pour chaque test.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top