在 Symfony 4 应用程序中,我配置了多个实体管理器。我希望我的功能测试能够自动为两个经理创建数据库表。
但是,当我运行测试时;PHP 单元遇到错误提示
PDOException:SQLSTATE [42S02]:未找到基表或视图:1146 表“test.example”不存在
配置/包/doctrine.yaml:
doctrine:
dbal:
connections:
default:
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
custom:
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
orm:
default_entity_manager: default
auto_generate_proxy_classes: '%kernel.debug%'
entity_managers:
default:
connection: default
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
mappings:
Model:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Model'
prefix: 'App\Entity\Model'
alias: Model
custom:
connection: custom
naming_strategy: doctrine.orm.naming_strategy.underscore
mappings:
Custom:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Custom'
prefix: 'App\Entity\Custom'
alias: Custom
要创建表和加载 Fixtures,我目前正在使用Liip Functional Test Bundle。
一个简单的测试如下所示:
测试\功能\GeneralControllerTest.php:
class GeneralControllerTest extends WebTestCase
{
/**
* {@inheritdoc}
*/
protected function setUp()
{
$this->loadFixtures([
SomeFixtures::class,
MoreFixtures::class,
]);
}
/**
* @dataProvider providePageUris
* @test
* @param string $uri
*/
public function checkThatPageLoads($uri)
{
$client = static::createClient();
/* ... more code ... */
$client->request(Request::METHOD_GET, $uri);
static::assertEquals(Response::HTTP_OK, $client->getResponse()->getStatusCode());
}
/**
* @return array
*/
public function providePageUris()
{
return [
["/dashboard"],
];
}
}
如何让我的测试用例为其他自定义 Doctrine EntityManagers 创建数据库表?
我试过添加:
$this->loadFixtures([], true, "custom");
并且:
$this->runCommand("doctrine:schema:create --env=test --em=custom");
到测试用例的 setUp() 方法,但这并没有导致所需要的。在将任何 Fixture 加载到数据库之前,都需要创建数据库表。