내 응용 프로그램을 실행하려고하는데 큰 문제가 있습니다. 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에 있는지 확인하기 위해 리포지토리에서 다시로드하려고 시도했지만 작동합니다 (코드 일부를 제거했습니다).
도움 말?