2010-07-28 5 views
1

단위 테스트를 실행하는 동안 심포니가 데이터베이스 연결을 여는 데 문제가있는 것으로 보입니다. 나는 내 테스트 ENV는 설정/databases.yml에서 지정한 :심포니 단위 테스트를 실행하면 "열린 연결이 없습니다"

 
all: 
    doctrine: 
    class: sfDoctrineDatabase 
    param: 
     dsn: 'mysql:host=localhost;dbname=ms' 
     username: ms 
     password: xxx 
test: 
    doctrine: 
    class: sfDoctrineDatabase 
    param: 
     dsn: 'mysql:host=localhost;dbname=ms' 
     username: ms 
     password: xxx 
... 

및 (테스트/단위/MSTest.php)에서 테스트 파일은 다음과 같습니다 : 내가 실행하려고하면

 
require_once dirname(__FILE__).'/../bootstrap/unit.php'; 
$a = new Article(); 
$a->setHeadline("Article Headline"); 
$a->save(); 

을 "symfony test : unit MS"를 사용하여 테스트합니다. "연결이 열려 있지 않습니다"를 반환하고 종료합니다.

 
C:\phpworkspace\ms>php test/unit/MSTest.php 

Fatal error: Uncaught exception 'Doctrine_Connection_Exception' with message 'There is no open connection' in C:\phpworkspace\ms\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Manager.php:662 
Stack trace: 
#0 C:\phpworkspace\ms\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Manager.php(557): Doctrine_Manager->getCurrentConnection() 
#1 C:\phpworkspace\ms\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Core.php(1095): Doctrine_Manager->getConnectionForComponent('Article') 
#2 C:\phpworkspace\ms\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Record.php(219): Doctrine_Core::getTable('Article') 
#3 C:\phpworkspace\ms\test\unit\UniversalDemoTest.php(15) 
: Doctrine_Record->__construct() 
#4 {main} 
    thrown in C:\phpworkspace\ms\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Manager.php on line 662 

나는 주위를 봤 모든 힌트가 database.yml을 테스트에 직접처럼 보인다 : 어떤 (위의 볼) 환경이 혼자 테스트를 실행 (PHP 테스트/단위/MSTest.php)는 전체 스택 추적을 반환 그 자리에. 커맨드 라인에서 사용자 이름/패스워드/db 이름을 테스트했고 사용자는 유효합니다. other solution described here 중 하나 도움하지 않는 것 내 경우

 
$configuration = ProjectConfiguration::getApplicationConfiguration(
    'frontend', 'test', true 
); 

에 만에

 
$configuration = ProjectConfiguration::hasActive() ? 
    ProjectConfiguration::getActive() : 
    new ProjectConfiguration(realpath($_test_dir.'/..')); 

에서 unit.php의 라인을 교체하는 것입니다. 두 경우 모두 구성을로드하지만 결과로 다른 객체 (print_r ($ configuration))를 반환합니다. - 기본값 인 경우 ProjectConfiguration, 새로 교체 된 행의 경우 frontendConfiguration. 마지막에는 모든 적절한 설정 지시어 (app.xml 파일의 app_xxx)가있는 것 같습니다. 제발 조언을 해 - 내가 어디에서 볼 수 있니? 나는 캐시 (symfony cc)를 지우고, 테스트를 위해 별도의 데이터베이스를 만들고, 모델/설비를 다시로드하고 지금까지 아무 것도 작동하지 않습니다. 이 모델은 유효하며 이미 장소에서 응용 프로그램에 사용되어 테스트 환경과 관련이 있어야합니다.

저는 symfony 1.4 (XAMPP)에서 PHP 5.3.1, mysql 5.1.41을 실행하고 있습니다.

감사합니다.

답변

6

당신은 교리의 모델 클래스를 사용하는 데이터베이스 관리자를 초기화해야합니다 : 그것은

$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'test', true); 
new sfDatabaseManager($configuration); 
+0

의 그! "새 sfDatabaseManager ($ 구성);"추가 수정 된 라인 트릭을 한 후에, 감사합니다! – dsomnus

관련 문제