2010-08-19 7 views
2

여기에 Zend Framework, ZFDoctrine 및 PHPUnit을 함께 사용하는 사람이 있습니까?ZF, ZFDoctrine 및 PHPUnit 설정

각 테스트 실행시 데이터베이스를 다시 작성하는 방법은 무엇입니까? 지역/생산/테스트 환경을 분리하는 방법은 무엇입니까?

단위 테스트 설정을 공유 하시겠습니까?

// /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); 

을하지만이 끝나는 :

나는 그런 식으로 뭔가를 시도하고있다

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 

모델이 생성되지 않습니다.

$provider->createDatabase(); 

그러나이 경우 데이터베이스에

가 생성됩니다

나는 실행 유사한 오류를 얻을.
다른 공급자 명령이 작동하지 않습니다.


솔루션 : 사람이 더 나은 방법을 알고 있다면

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

이, 저를 수정하시기 바랍니다.

+0

위대한 작품입니다. – Daff

답변

0

저는 ZFDoctrine을 사용하지 않았지만 Doctrine 1.2는 사용하지 않았습니다. 여기서 핵심은 만드는 모든 데이터베이스를 재 구축의 마지막 행이 실제로

<?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")); 

입니다

: 내 솔루션이 더 나은 경우 나도 몰라하지만 난 any1 관심이 경우 게시 생각, 여기 내 테스트 폴더에 bootstrap.php입니다 각 테스트를위한 깨끗한 환경.