【发布时间】:2018-08-20 22:05:03
【问题描述】:
我正在测试 phpUnit 中的某个动作。
在我的测试中,我从容器中获取了实体管理器。我创建了一个实体 $finalisation,然后将其插入到我的表中:
public function testAction()
{
self::bootKernel();
$em = static::$kernel->getContainer()
->get('doctrine')
->getManager()
;
//I create some $finalisation entity, and insert it
(...)
$em->persist($finalisation);
$em->flush();
//I call then the action to test (my function authentification works well)
$crawler = $this->authentification("/annonce/finaliser-annonce/annonce-en-cours-4");
// (... MORE CODE SEE BELOW)
}
此操作旨在通过服务 (GestionnaireFinalisation) 更改 $finalisation 对象:$finalisation 的 finaliseParAuteur 字段从 false 变为 true。
现在,我有一项名为 GestionnaireFinalisation 的服务,它可以将字段转换为 对象 $finalisation 从 FALSE 到 TRUE
class GestionnaireFinalisation
{
protected $em;
public function __construct(EntityManager $entityManager){
$this->em = $entityManager;
}
public function finalisationParAuteur($annonceEnCours, $profilAuteur)
{
$finalisation = $this->em->getRepository('AppBundle:Finalisation')
->findFinalisationParProfilAuteur($annonceEnCours, $profilAuteur);
if ($finalisation->getFinaliseParPresta())
{
// ... THIS CODE IS NOT RUN
}
else
{
//THIS IS THE CODE WHICH IS RUN
$finalisation->setFinaliseParAuteur(true);
$this->em->flush();
return (false);
}
}
现在问题来了:
当我在测试中搜索 $finalisation 时,似乎我没有修改对象:
$finalisation = $em->getRepository(Finalisation::class)
->someMethodToGetTheFinalisationUpdated();
证明:当我转储 $finalisation 时,我在 dateCreation 和 dateUpdate 中得到了相同的 DateTime,这不应该是这种情况,因为该对象在服务中被函数 finalisationParAuteur 修改了。
我怀疑问题出在两个实体管理器上(一个在测试中,另一个在服务中)。
非常感谢任何帮助!
谢谢!
【问题讨论】:
标签: symfony doctrine entitymanager