2013-01-20 2 views
1

내 응용 프로그램을 실행하려고하는데 큰 문제가 있습니다. DB 테이블이 만들어지지 않아 어떤 비품도 놓을 수 없습니다.symfony2 테스트 환경에서 동작 : DB 테이블이 생성되지 않았습니다.

내 시나리오는 다음과 같습니다 FeatureContext의

Scenario: Check the stories page 
    Given Database is set 
     And I am logged as "admin" and password "123123123" 
     And print last response 
     ... 

부 :

/** 
* @Given /^Database is set$/ 
*/ 
public function databaseIsSet() 
{ 
    $this->generateSchema() ; 
    $admin = new User() ; 
    $admin->setRoles(array(User::ROLE_SUPER_ADMIN)) ; 
    $admin->setEnabled(true) ; 
    $admin->setUsername("admin") ; 
    $admin->setPlainPassword("123123123") ; 
    $admin->setEmail("[email protected]") ; 
    $em = $this->getEntityManager() ; 
    $em->persist($admin) ; 
    $em->flush() ; 
      echo $admin->getId() . "==" ; 
    echo "db set" ; 
} 
/** 
* @Given /^I am logged as "([^"]*)" and password "([^"]*)"$/ 
*/ 
public function iAmLoggedAsAndPassword($username, $password) 
{ 
    return array(
     new Step\When('I am on "/login"'), 
     new Step\When('I fill in "username" with "' . $username . '"'), 
     new Step\When('I fill in "password" with "' . $password . '"'), 
     new Step\When('I press "Login"'), 
    ); 
} 
protected function generateSchema() 
{ 
    // Get the metadatas of the application to create the schema. 
    $metadatas = $this->getMetadatas(); 

    if (! empty($metadatas)) { 
     /** 
     * @var \Doctrine\ORM\Tools\SchemaTool 
     */ 
     $tool = new SchemaTool($this->getEntityManager()); 
//   $tool->dropDatabase() ; 
     $tool->createSchema($metadatas); 
    } else { 
     throw new Doctrine\DBAL\Schema\SchemaException('No Metadata Classes to process.'); 
    } 
} 

/** 
* Overwrite this method to get specific metadatas. 
* 
* @return Array 
*/ 
protected function getMetadatas() 
{ 
    $result = $this->getEntityManager()->getMetadataFactory()->getAllMetadata() ;return $result; 
} 

protected function getEntityManager() 
{ 
    return $this->kernel->getContainer()->get("doctrine")->getEntityManager() ; 
} 
.... 

generateSchema의 코드는 내가 가지고 완벽하게 작동 Phpunits 테스트에서 인터넷에서 어딘가에 촬영 및 사용됩니다.

하지만; 내가 bin/behat를 실행할 때, 나는 시나리오의 로그인 부분 후

SQLSTATE[HY000]: General error: 1 no such table: tbl_user 

를 얻을.

나는 실제로 출력 된 결과를 보여 주므로 메서드가 실제로 실행되는지 확인해야합니다. 또한, $ admin은 출력에서도 볼 수있는 1의 ID를 얻습니다.

내 test env는 기본 sqlite DB를 사용하며 config에 base_url에 'http://mysite.local/app_dev.php/' 또는 'http://mysite.local/app_test.php/'을 입력하면 부적절합니다. 내가 knpLabs 페이지에서 붙여 넣은 &을 복사해도 로그인이 작동하지 않습니다. $ admin이 여전히 DB에 있는지 확인하기 위해 리포지토리에서 다시로드하려고 시도했지만 작동합니다 (코드 일부를 제거했습니다).

도움 말?

답변

3

사실, 문제를 발견했습니다. Sqlite는 메모리 내에서 작동하고 login URL과 같은 일부 페이지에 대한 각 요청시 이전 상태가 손실되었습니다. 나는 config_behat.yml 이러한 설정으로 새로운 환경 app_behat.php을 만들어 :

imports: 
    - { resource: config.yml } 

framework: 
    test: ~ 
    session: 
    storage_id: session.storage.mock_file 

doctrine: 
    dbal: 
    dbname: other_database 

을 그리고 그것은 작동합니다. 어쩌면 누군가가 유용 할 것입니다.