Symfony static laden von Fixtures beim Laden eines Integration Tests in PHPUnit


Mit der statischen Funktion setUpBeforeClass() von PHPunit kann man einmalig vor dem durchführen der Tests  in einer Klasse Fixtures laden und die Datenbank zurücksetzen:

class MyTestCase extends WebTestCase
{
    use FixtureLoadTrait;
 /**
 * @return void
 */
 public static function setUpBeforeClass()
 {

     $fixtures = [
         new TriggerConditionFixture()
     ];
     self::rebuildDataBase($fixtures);
 }

Die Fixtures lassen sich bequem mit dem Trait laden und die Datenbank wird geleert:

<?php

namespace Tests\Integration;

use Doctrine\Common\DataFixtures\Executor\ORMExecutor;
use Doctrine\Common\DataFixtures\Purger\ORMPurger;
use Symfony\Bridge\Doctrine\DataFixtures\ContainerAwareLoader;
use Tests\Fixture\BackendBundle\DataFixtures\ORM\LoginFixture;

trait FixtureLoadTrait
{

    /**
     * @param array $fixtures
     *
     * @return void
     */
    protected static function rebuildDataBase(array $fixtures)
    {
        self::bootKernel();
        $fixtureLoader = new ContainerAwareLoader(
            self::$kernel->getContainer()
        );
        foreach($fixtures as $fixture){
            $fixtureLoader->addFixture($fixture);
        }
        $fixtureLoader->addFixture(new LoginFixture());
        self::getFixtureExecutor()->execute($fixtureLoader->getFixtures());
    }

    /**
     * @return ORMExecutor
     */
    protected static function getFixtureExecutor()
    {
        /** @var \Doctrine\ORM\EntityManager $entityManager */
        $entityManager = self::$kernel->getContainer()
            ->get('doctrine')
            ->getManager();

        return new ORMExecutor(
            $entityManager,
            new ORMPurger($entityManager, ['user'])
        );
    }

    /**
     * @return ContainerAwareLoader
     */
    protected static function getFixtureLoader()
    {
        return new ContainerAwareLoader(
            self::$kernel->getContainer()
        );
    }
}

Hinterlasse eine Antwort

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>