web-dev-qa-db-fra.com

Comment puis-je charger des appareils à partir d'un test fonctionnel dans Symfony 2

Mon DoctrineFixturesBundle est installé et je peux charger un appareil via la ligne de commande, mais comment puis-je charger des appareils à partir de mon test fonctionnel?

27
Ousmane

Vous pouvez charger les appareils dans la méthode setUp() de votre test comme vous pouvez le voir dans cette question .

Vous pouvez utiliser le code dans la question mais devez ajouter --appendà la doctrine:fixtures:load commande afin d'éviter la confirmation par le kit de fixtures.

La meilleure solution est de jeter un œil au LiipFunctionalTestBundle qui facilite l'utilisation des fixations de données.

18
Nicolai Fröhlich

Si vous utilisez WebTestCase de symfony, il existe en fait un moyen très simple de charger vos appareils. Votre appareil doit implémenter le FixtureInterface; ainsi, vous pouvez appeler sa méthode load() directement dans la méthode setUp() de votre test. Il suffit de passer un EntityManager à la méthode load(), qui peut être acquise à partir du conteneur symfony:

public function setUp() {
    $client = static::createClient();
    $container = $client->getContainer();
    $doctrine = $container->get('doctrine');
    $entityManager = $doctrine->getManager();

    $fixture = new YourFixture();
    $fixture->load($entityManager);
}
20
firstprophet

Je voulais juste offrir une approche légèrement plus soignée si vous souhaitez d'abord purger votre tableau des données de test précédentes, par ex. si vous exécutez vos tests dans phpunit.

use Doctrine\Common\DataFixtures\Purger\ORMPurger;
use Doctrine\Common\DataFixtures\Executor\ORMExecutor;
use Doctrine\Common\DataFixtures\Loader;
use Namespace\FakeBundle\DataFixtures\ORM\YourFixtures;

public function setUp()
{
    static::$kernel = static::createKernel();
    static::$kernel->boot();
    $this->em = static::$kernel->getContainer()
        ->get('doctrine')
        ->getManager()
    ;

    $loader = new Loader();
    $loader->addFixture(new YourFixtures);

    $purger = new ORMPurger($this->em);
    $executor = new ORMExecutor($this->em, $purger);
    $executor->execute($loader->getFixtures());

    parent::setUp();
}

Cela permet de charger les appareils (vous pouvez pousser davantage dans la méthode d'ajout d'appareils) et de purger les tables avant de les charger. Notez également que MongoDB a la même option en utilisant MongoDBPurger et MongoDBExecutor. J'espère que cela aide quelqu'un

7
Peter

Comme il a déjà été mentionné, il est recommandé d'utiliser le LiipFunctionalTestBundle . Ensuite, vous voulez étendre votre WebTestCase à partir du Liip\FunctionalTestBundle\Test\WebTestCase. Cela permettra d'appeler $this->loadFixtures() qui prend un tableau de fixtures comme argument.

$fixtures = array('Acme\MemeberBundle\DataFixtures\ORM\LoadMemberData');
$this->loadFixtures($fixtures);

Pour plus de détails, j'ai écrit un court blogpost .

2
Marc Juchli