Comment puis-je charger des fixtures à partir d'un test fonctionnel en Symfony 2
Mon DoctrineFixturesBundle est installé et je peux charger gabarit de creux de la ligne de commande mais , comment puis-je charger des montages à partir de mon test fonctionnel ?
4 réponses
vous pouvez charger les fixtures 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 vous devez ajouter --append
à la commande doctrine:fixtures:load
afin d'éviter la confirmation par le fixtures-bundle.
la meilleure solution est d'avoir un regard sur le LiipFunctionalTestBundle qui rend l'utilisation des fixtures de données plus facile.
si vous utilisez le WebTestCase
de symfony , il y a en fait un moyen très simple de charger vos fixtures.
Votre appareil doit implémenter la méthode FixtureInterface
; vous pouvez donc l'appeler load()
directement dans la méthode setUp()
de votre test. Vous avez juste à passer un EntityManager
à la méthode load()
, qui peut être obtenue à 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);
}
je voulais juste offrir une approche légèrement plus claire si vous voulez d'abord purger votre tableau des données de test précédentes, par exemple 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 aux fixtures d'être chargées, (vous pouvez pousser plus dans la méthode add fixture), et purger les tables avant qu'elles ne soient chargées. Notez également que MongoDB a la même option en utilisant MongoDBPurger, et MongoDBExecutor. Espérons que cela aide quelqu'un
comme il a déjà été mentionné, il est recommandé d'utiliser le LiipFunctionalTestBundle.
Ensuite, vous voulez étendre votre WebTestCase à partir de la Liip\FunctionalTestBundle\Test\WebTestCase. Cela permettra d'appeler $this->loadFixtures()
qui prend un tableau d'appareils comme un argument.
$fixtures = array('Acme\MemeberBundle\DataFixtures\ORM\LoadMemberData');
$this->loadFixtures($fixtures);
pour plus de détails j'ai écrit un court billet de blog: http://marcjuch.li/blog/2014/04/06/symfony2-rest-functional-testing-with-fixtures /