Agrupando los archivos con datos de prueba en las aplicaciones Symfony

4 de enero de 2019

Los fixtures o archivos con datos de prueba se utilizan en Symfony y muchas otras aplicaciones para generar datos ficticios con los que poder probar la aplicación. El bundle DoctrineFixturesBundle que integra la librería de fixtures de Doctrine en Symfony acaba de publicar su versión 3.1.0 e incluye una novedad muy interesante: la posibilidad de agrupar archivos de fixtures.

Esta nueva funcionalidad permite cargar uno o más archivos de fixtures pero no todos, algo muy útil en las aplicaciones complejas que definen muchos fixtures. Para ello, utiliza el método getGroups() definido en la nueva interfaz FixtureGroupInterface:

// src/DataFixtures/UserFixtures.php
use Doctrine\Bundle\FixturesBundle\FixtureGroupInterface;

class UserFixtures extends Fixture implements FixtureGroupInterface
{
    // ...

    public static function getGroups(): array
    {
        return ['basicos', 'usuarios'];
    }
}

Una vez definido el grupo o grupos al que pertenece cada clase, ya puedes utilizar la opción --group en el comando que carga los fixtures para cargar solo los que pertenezcan al grupo indicado:

# solamente carga los fixtures marcados como 'basicos'
$ ./bin/console doctrine:fixtures:load --group=basicos

# puedes añadir más de una opción '--group' para cargar más de un grupo
$ ./bin/console doctrine:fixtures:load --group=basicos --group=usuarios

Para mejorar tu productividad, a cada clase de fixtures se le asigna automáticamente un grupo que se llama como el nombre de la clase. Así que en el anterior ejemplo, la clase también pertenece a un grupo llamado UserFixtures. De esta forma es sencillo cargar una única clase de fixtures:

$ php bin/console doctrine:fixtures:load --group=UserFixtures

La nueva versión del bundle también incluye otras mejoras menores y elimina el soporte para las versiones de PHP anteriores a 7.1, tal y como puedes leer en el changelog de DoctrineFixturesBundle 3.1.0.