【发布时间】:2016-10-30 15:19:58
【问题描述】:
我实际上正在对我的 api 进行一些功能测试,但我遇到了一个我不太了解的问题。
我想测试一个与远程 Web 托管服务器交互的 API。目标是管理虚拟主机、DNS 区域、数据库等...
我有一个测试远程服务器,为了避免冲突,我在测试后删除了创建的东西(在TearDown() 函数中)并创建基础(在setUp() 函数中)。在setUp() 中,我还在设置中加载了固定装置。
在添加我的主要实体的子实体的测试之后,我想清理远程服务器:
$service = $this->fixtures->getReference('service-web');
$this->container->get('webmanager')->deleteHosting($service, true);
deleteHosting() 函数删除所有远程的东西(真正的参数是“force”参数,它确保函数在出错后不会停止。
$service 变量包含我的主要服务实体。在这个实体中,我还与addonDomain 的实体存在一对多关系。
我的功能测试创建了一个 addonDomain。
测试没问题,但是当我尝试删除我的服务时,附加的实体让 Doctrine 大喊大叫:Doctrine\ORM\ORMInvalidArgumentException: Detached entity AppBundle\Entity\Service\Web\AddonDomain@0000000054814da900000000073c524a cannot be removed。
我尝试了很多东西,但都没有奏效(即:使用学说管理器来检索实体而不是使用夹具。
非常感谢您的帮助, 最好的问候。
已解决! 事实上,我使用的是测试类的容器和实体管理器,而不是客户端自己的。这就是问题所在……
【问题讨论】:
-
我有同样的问题,不知道如何解决它:/
-
这件事发生在一年前,我记不太清了。但正如在原始帖子中更新的那样,不要使用
$this->container,而是尝试在setUp()和tearDown方法中使用self::$container。希望这会有所帮助。 -
在实体上调用
remove之前,我通过调用merge解决了这个问题。不确定它是最好的方法,但它有效!不过感谢您的回复! -
使用
$this->em = static::$kernel->getContainer()->get('doctrine.orm.entity_manager');或$this->em = $this->client->getContainer()->get('doctrine.orm.entity_manager');甚至em->merge(..)都没有变化。仅当我逐个刷新实体而不是单个flush()时,我的实体才被删除。
标签: php symfony doctrine-orm phpunit