Я пытаюсь работать со своим приложением, и у меня есть большая проблема; Таблицы БД не создаются, поэтому никакие фикстуры поставить не могу.
Мой сценарий:
Scenario: Check the stories page
Given Database is set
And I am logged as "admin" and password "123123123"
And print last response
...
Часть FeatureContext:
/**
* @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
после входа в систему часть сценария.
Оператор echo
, который у меня есть, также отображается в выводе, просто чтобы убедиться, что метод действительно выполняется. Кроме того, $admin получает идентификатор 1, который также виден в выводе.
В моей тестовой среде используется база данных sqlite по умолчанию, и не имеет значения, поставлю ли я 'http://mysite.local/app_dev.php/'
или 'http://mysite.local/app_test.php/'
для base_url в конфигурации; логин не работает, хотя я скопировал и вставил его со страницы knpLabs. Чтобы убедиться, что $admin все еще находится в БД, я попытался перезагрузить его из репозитория, и он работает (я удалил эту часть кода).
Помощь?