我正在编写一个严重依赖数据夹具的 Symfony 2 单元测试。作为捷径,我连接了一个方法,让我可以访问夹具加载器ReferenceRepository
,以便我可以在测试中访问共享实体。
但是,当我从 中拉出一个对象时ReferenceRepository
,它没有任何关系,即使我将它们保存在数据夹具中。
奇怪的是,其中有一些代码ReferenceRepository
似乎正在剥离这些关系,我不明白它为什么这样做(更不用说如何防止它了)。
例如,以下是数据夹具的样子:
public function load(ObjectManager $manager)
{
$project = new Project();
// ... populate fields ...
/* Add one detail field to the Project. */
$detail = new ProjectDetail();
// ... populate fields ...
$project->addDetail($detail);
$manager->persist($project);
$manager->flush();
$this->addReference('project-onedetail', $project);
}
在我的测试用例中,我正在做这样的事情(或多或少):
$project =
$this->fixtureLoader->getReferenceRepository()
->getReference('project-onedetail');
当我调用测试用例中的方法来获取这个Project
对象时,我注意到一些奇怪的行为:
来自Doctrine\Common\DataFixtures\ReferenceRepository
(添加评论):
public function getReference($name)
{
$reference = $this->references[$name];
// At this point, $reference contains the Project object with related ProjectDetail.
// It would be awesome if the method would just return $reference...
$meta = $this->manager->getClassMetadata(get_class($reference));
$uow = $this->manager->getUnitOfWork();
if (!$uow->isInIdentityMap($reference) && isset($this->identities[$name])) {
// ... but instead it goes into this conditional....
$reference = $this->manager->getReference(
$meta->name,
$this->identities[$name]
);
// ... and now $reference->getDetails() is empty! What just happened??
$this->references[$name] = $reference; // already in identity map
}
return $reference;
}
里面发生了什么ReferenceRepository->getReference()
?为什么相关对象会从 中删除$reference
,我该如何防止呢?