Configurando un paquete de Symfony con pruebas unitarias contra una base de datos.
Estoy utilizando Pimcore, un framework con Symfony en su núcleo. Pimcore está programado por personas que no comprenden las pruebas unitarias. Están estrechamente acoplados a la base de datos.
Estoy escribiendo un bundle para ampliar las funcionalidades de Pimcore. Sin embargo, algo sale mal cuando el núcleo de Pimcore intenta escribir en la base de datos:
Error: Llamada a una función miembro en nulo
/opt/vendor/pimcore/pimcore/lib/Pimcore.php:167
/opt/vendor/pimcore/pimcore/lib/Db.php:49
/opt/vendor/pimcore/pimcore/lib/Model/Dao/AbstractDao.php:37
/opt/vendor/pimcore/pimcore/lib/Model/AbstractModel.php:120
/opt/vendor/pimcore/pimcore/lib/Model/AbstractModel.php:54
/opt/vendor/pimcore/pimcore/models/DataObject/ClassDefinition.php:288
/opt/vendor/pimcore/pimcore/models/DataObject/Concrete.php:419
/opt/vendor/pimcore/pimcore/models/DataObject/Concrete.php:729
/opt/tests/DataObjectTest.php:28
El código que realmente falla es el siguiente:
/**
* @return \Pimcore\Db\ConnectionInterface|Connection
*/
public static function get()
{
/**
* @var \Pimcore\Db\ConnectionInterface $db
*/
$db = \Pimcore::getContainer()->get(‘database_connection’);
return $db;
}
Estoy dispuesto a crear el esquema de la base de datos y probarlo contra una base de datos específica para esta biblioteca, ya que es literalmente imposible simular la base de datos. Sin embargo, no tengo idea de cómo hacerlo, ya que estoy en un bundle independiente que no tiene todo el directorio de configuración en el que se define Doctrine, etc., ni tiene un Kernel.php que construye el contenedor.
Entonces, mi pregunta básicamente es, ¿cómo puedo configurar una conexión de base de datos del Kernel utilizada por PHPUnit?
davy.ai
Para configurar una conexión de base de datos Kernel utilizada por PHPUnit en un paquete independiente sin un directorio de configuración completo o un archivo Kernel.php, puede seguir estos pasos:
Cree un nuevo archivo de inicio en su directorio de pruebas, por ejemplo, tests/bootstrap.php. Este archivo debe incluir el siguiente código:
Cree un directorio de configuración en su directorio de pruebas, por ejemplo, tests/config.
Cree un archivo config_test.yaml dentro del directorio de configuración. Este archivo debe contener su configuración de doctrine, por ejemplo:
Ahora, debería poder ejecutar pruebas de PHPUnit que utilicen una conexión de base de datos configurada por el Kernel. Por ejemplo, en su prueba, puede usar:
Esto le proporcionará una conexión de base de datos para usar en sus pruebas.