21

我想知道如何在 WebTestCase 实例中检索实体管理器。

例如,查看在测试运行期间是否真的在 DB 中创建了实体。

有什么想法吗?

4

4 回答 4

33

您可以通过内核检索 DIC(依赖注入容器),内核是 WebTestCase 的受保护成员。

您可以在 WebTestCase 中执行此操作:

$em = $this->kernel->getContainer()->get('doctrine.orm.entity_manager');

更新

根据您自己的评论,甚至有一个捷径(因为无论如何您都会有一个客户):

$client = $this->getClient();
$container = $client->getContainer();

文档中所述

于 2011-04-20T11:16:12.560 回答
7

如果你有你的client,你可以从中获取实体管理器

$em = $client->getContainer()->get('doctrine.orm.entity_manager');

不要使用 `getEntityManager,它从 Symfony 2.1 开始被弃用。

请享用 :)

于 2014-12-04T09:02:01.410 回答
2

事情发生了变化,我想添加一个适用于 Symfony 4 的更新。

如果您需要在测试中访问服务,您仍然需要先获取容器。这可以像这样完成:

$container = self::$container;

现在您可以获得服务,在本例中为实体管理器

$this->em = $container->get('doctrine.orm.entity_manager');

我使用$this假设语句写在setUp方法中并且在其他测试方法中需要。

Symfony 官方文档的相关部分

于 2019-03-05T09:14:52.197 回答
0
$this->container->get('doctrine.orm.entity_manager');
于 2016-09-21T15:31:29.207 回答