私は自分のアプリケーションを打ち負かそうとしていますが、大きな問題があります。DB テーブルが作成されていないため、フィクスチャを配置できません。
私のシナリオは次のとおりです。
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 を使用していますが、config に base_url'http://mysite.local/app_dev.php/'
またはfor を配置しても関係ありません。'http://mysite.local/app_test.php/'
knpLabsのページからコピペしたのにログインできません。$admin がまだ DB にあることを確認するために、リポジトリから再読み込みしようとしましたが、機能しました (コードのその部分を削除しました)。
ヘルプ?