Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Cargar fixtures antes de los tests con LiipFunctionalTestBundle

16 de junio de 2016

Buenas noches.

Estoy usando LiipFunctionalTestBundle con la base de datos sqlite en el entorno de tests. Quiero que cuando ejecute phpunit cargue todas mis fixtures antes de ejecutar los tests.

Por lo que veo en la documentación para cada test hay que cargarle las fixtures que necesita, imagino que estar cargando fixtures continuamente repercutirá en el rendimiento de los tests.

La única manera que he visto es crear un test que solo cree las fixtures y llamarlo ALoadFixturesTest, la "A" delante porque el archivo phpunit ejecuta los tests por orden alfabético. Esta es una mala práctica puesto que el orden de los tests no debe afectar.

class ALoadFixturesTest extends WebTestCase
{
    public function testIndex()
    {
        $this->loadFixtures(array(
          'AppBundle\DataFixtures\ORM\Users',
          ...
        ));
    }
}

¿Cual sería la manera correcta?

Gracias.


Respuestas

#1

Yo también usaba ese bundle para cargar los fixtures en la base de datos pero dejé de usarlo por el mismo problema que comentas aquí. Ahora lo que hago es lo siguiente:

  1. En el bootstrap de los tests creo todos los fixtures ejecutando los comandos de consola (doctrine:database:create, doctrine:schema:create y doctrine:fixtures:load).
  2. Los tests extienden de una clase propia (que a su vez extiende de la típica Symfony\Bundle\FrameworkBundle\Test\WebTestCase) y ahí hacen una copia del archivo que tiene la base de datos SQLite.

El resultado son tests rápidos, sin complicaciones y sin tener que usar este bundle. Si quieres ver el código concreto:

  1. Cargar los fixtures
  2. Inicializar la base de datos

@javiereguiluz

16 junio 2016, 8:29
#2

He adaptado el código a mi proyecto y me he quitado también de usar ese bundle, muchas gracias por tu ayuda una vez más Javier.

@nonio_87

16 junio 2016, 20:23