在Symfony 4应用程序中,我配置了多个实体管理器。 我希望我的功能测试能够自动为两个管理员创建数据库表。
但是,当我运行测试时; PHP单元遇到错误提示
PDOException:SQLSTATE [42S02]:找不到基表或视图:1146 表'test.example'不存在
config / packages / 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
要创建表格并加载灯具,我目前正在使用Liip Functional Test Bundle。
一个简单的测试如下:
tests \ Functional \ 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 EntityManager创建数据库表?
我尝试添加:
$this->loadFixtures([], true, "custom");
还有:
$this->runCommand("doctrine:schema:create --env=test --em=custom");
到测试用例的setUp()方法,但这没有得到所需的结果。将所有Fixture加载到数据库之前,都需要创建数据库表。
答案 0 :(得分:1)
为了在加载数据固定装置时没有在其他实体管理器中删除表并删除连接,我使用了不同的环境变量来更改了理论配置。
config / packages / doctrine.yaml:
n_jobs
答案 1 :(得分:0)
根据WebTestCase on GitHub的代码,第二个参数应包含对象管理器的名称。我不确定指定custom
是否足够,或者您是否必须指定全名doctrine.entity_manager.custom
。