Symfony2: Testing: Le gestionnaire d’entité « perd » un objet

Lors de la rédaction de test fonctionnels sous symfony2 je suis souvent confronté a une erreur du gestionnaire d’entités. Alors que tout ce passe correctement en développement et en production, pendant le test fonctionnel je me retrouve parfois avec cette erreur:

A new entity was found through the relationship ‘Muzich\CoreBundle\Entity\Element#owner’ that was not configured to cascade persist operations for entity: bux. Explicitly persist the new entity or configure cascading persist operations on the relationship. If you cannot find out which entity causes the problem implement ‘Muzich\CoreBundle\Entity\User#__toString()’ to get a clue.

Le problème se résout en récupérant la dite entité par le biais de doctrine dans la même fonction que la ou se situe le ->persist().

if ($this->container->getParameter('env') == 'test')
{
  $user = $this->getDoctrine()->getRepository('MuzichCoreBundle:User')->findOneById(
    $this->container->get('security.context')->getToken()->getUser()->getId(),
    array()
  )->getSingleResult();
}

$em = $this->getDoctrine()->getEntityManager();
[...] // $user intervient dans une entité persistante
$em->flush();

Ici le paramètre ‘env’ est un paramètre personnalisé en fonction de l’environnement (config_dev.yml, config_test.yml …).

Une réflexion sur « Symfony2: Testing: Le gestionnaire d’entité « perd » un objet »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *