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().
{
$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 …).