我正在尝试模仿我的应用程序,但我遇到了一个大问题;没有创建数据库表,所以我不能放置任何固定装置。
我的情况是:
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("admin@mysite.com") ;
$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 的 ID 为 1,这在输出中也可见。
我的测试环境使用默认的sqlite DB,如果我在配置中放置'http://mysite.local/app_dev.php/'
或'http://mysite.local/app_test.php/'
用于base_url,则无关紧要;尽管我从 knpLabs 页面复制并粘贴了登录,但登录不起作用。为了确保 $admin 仍在数据库中,我尝试从存储库重新加载它并且它可以工作(我删除了那部分代码)。
帮助?