services - symfony load data fixture
¿Cómo puedo cargar dispositivos desde la prueba funcional en Symfony 2? (4)
Como ya se mencionó, se recomienda utilizar LiipFunctionalTestBundle. Luego desea extender su WebTestCase desde Liip / FunctionalTestBundle / Test / WebTestCase. Esto permitirá llamar a $this->loadFixtures()
que toma una matriz de aparatos como un argumento.
$fixtures = array(''Acme/MemeberBundle/DataFixtures/ORM/LoadMemberData'');
$this->loadFixtures($fixtures);
Para más detalles escribí una breve entrada de blog: http://marcjuch.li/blog/2014/04/06/symfony2-rest-functional-testing-with-fixtures/
Mi DoctrineFixturesBundle está instalado y puedo cargar dispositivos a través de la línea de comandos pero, ¿cómo puedo cargar dispositivos desde mi prueba funcional?
Si usas WebTestCase
de Symfony, en realidad hay una manera muy fácil de cargar tus dispositivos. Tu accesorio tiene que implementar el FixtureInterface
; por lo tanto, puede llamar a su método load()
directamente en el método setUp()
su prueba. Solo tienes que pasar un EntityManager
al método load()
, que se puede adquirir desde el contenedor de Symfony:
public function setUp() {
$client = static::createClient();
$container = $client->getContainer();
$doctrine = $container->get(''doctrine'');
$entityManager = $doctrine->getManager();
$fixture = new YourFixture();
$fixture->load($entityManager);
}
Solo quería ofrecer un enfoque un poco más ordenado si desea purgar primero su tabla de datos de pruebas anteriores, por ejemplo, si está ejecutando sus pruebas en 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();
}
Esto permite que los dispositivos se carguen (puede empujar más en el método de agregar dispositivos) y purgar las tablas antes de que se carguen. También tenga en cuenta que MongoDB tiene la misma opción al usar MongoDBPurger y MongoDBExecutor. Espero que ayude a alguien
Puede cargar los dispositivos en el método setUp()
su prueba como puede ver en esta pregunta .
Puede usar el código en la pregunta, pero necesita adjuntar --append
a la doctrine:fixtures:load
command para evitar la confirmación por parte de fixtures-bundle.
La mejor solución es echar un vistazo a LiipFunctionalTestBundle que facilita el uso de dispositivos de datos.