update symfony2 getrepository getdoctrine force delete consultas php phpunit doctrine2

php - symfony2 - symfony 4 database config



El administrador de entidad de Doctrine se cuelga y se queda abajo (1)

Entonces, cuando realizo pruebas en mi aplicación ZF / Doctrine, algunas pruebas rompen con Doctrine Entity Manager, y todas las pruebas secuenciales fallan debido a que el EM está cerrado.

Configuré el EM en mis pruebas / bootstrap.php:

$application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . ''/configs/application.ini'' ); $application->bootstrap(); (...) $bootstrap = $application->getBootstrap(); $em = $bootstrap->getResource(''doctrinemanager'');

Luego lo configuro dentro de la función de prueba de configuración () ($ this -> _ service es el servicio que se prueba):

$em = App::getEntityManager(); $this->_em = clone $em; $this->_service->setEm($this->_em);

Y luego, cuando realizo una prueba que hace que EM emita una excepción y se cierre (y ese es el comportamiento correcto para mí), permanece cerrada durante todas las pruebas que, por supuesto, fallan debido a que EM está cerrado. Ese no es el comportamiento que espero para las pruebas, como puedes adivinar.

Intenté clonar el EM antes de configurarlo en el servicio, pero no funcionó.

¿Hay alguna manera fácil de reabrir el EM quizás utilizando algunos métodos de Doctrine?


No, no es que yo sepa de todos modos. La forma más simple de evitar esto sería simplemente reiniciar la aplicación para ejecutarla en la fase de configuración de cada prueba. Entonces, cada prueba obtiene una nueva instancia de $application y una $em nueva y fresca junto con ella. Esa es la solución rápida.

La solución adecuada probablemente sea desacoplar sus pruebas de su Zend_Application . Permita que sus pruebas se ejecuten con un simple administrador de entidades, posiblemente utilizando una conexión simulada o una conexión a una base de datos SQLite en la memoria . Cree solo este administrador de entidades en la fase de configuración de la prueba, de modo que cada prueba obtenga un nuevo administrador de entidades. Esto es similar a la solución rápida anterior, excepto que ahora solo crea específicamente un administrador de entidades para las pruebas en lugar de poner a cero toda su aplicación para cada prueba. Es más delgado y simple.