My DoctrineFixturesBundle jest zainstalowany i mogę wczytać urządzenie przez linię poleceń, ale jak mogę załadować urządzenia z mojego testu funkcjonalnego?Jak mogę załadować urządzenia z testu funkcjonalnego w Symfony 2
Odpowiedz
Możesz załadować urządzenia w swojej metodzie testu setUp()
, jak widać w this question.
Możesz użyć kodu w pytaniu, ale musisz dołączyć --append
do komendy doctrine:fixtures:load
, aby uniknąć potwierdzenia przez pakiet urządzeń.
Lepszym rozwiązaniem jest zapoznanie się z LiipFunctionalTestBundle, dzięki czemu korzystanie z urządzeń do transmisji danych jest łatwiejsze.
Jeśli używasz Symfony WebTestCase
, istnieje bardzo łatwy sposób na załadowanie urządzeń. Twoja oprawa musi zaimplementować FixtureInterface
; w ten sposób można ją nazwać metodą load()
bezpośrednio w metodzie testu setUp()
. Po prostu trzeba zdać EntityManager
metody load()
, które mogą być nabyte z pojemnika symfony:
public function setUp() {
$client = static::createClient();
$container = $client->getContainer();
$doctrine = $container->get('doctrine');
$entityManager = $doctrine->getManager();
$fixture = new YourFixture();
$fixture->load($entityManager);
}
Tęskni za wszystkimi rzeczami ReferenceRepository - addRef/getRef –
Chciałem zaoferować nieco schludniejszy podejście, jeśli chcesz, aby najpierw oczyścić tabelę z poprzednich danych testowych, na przykład jeśli używasz swoich testów w 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();
}
Pozwala Oprawy mają być załadowane, (można wcisnąć bardziej do metody oprawy ADD), i oczyścić tabele, zanim zostaną one załadowane. Należy również zauważyć, że MongoDB ma tę samą opcję przy użyciu MongoDBPurger i MongoDBExecutor. Mam nadzieję, że komuś pomogło
Witam, próbuję użyj swojego podejścia, ale '$ executor' zamierza usunąć całą bazę danych, a nie tylko powiązane tabele, dlaczego to zachowanie? Dowolny przykład, jak oczyścić wygenerowane dane podczas ładowania urządzeń? – ReynierPM
Jak już wspomniano, zaleca się użycie LiipFunctionalTestBundle. Następnie należy rozszerzyć WebTestCase z Liip \ FunctionalTestBundle \ Test \ WebTestCase. Umożliwi to wywołanie $this->loadFixtures()
, która przyjmuje jako argument tablicę urządzeń.
$fixtures = array('Acme\MemeberBundle\DataFixtures\ORM\LoadMemberData');
$this->loadFixtures($fixtures);
Więcej szczegółów Napisałem krótki blogpost: http://marcjuch.li/blog/2014/04/06/symfony2-rest-functional-testing-with-fixtures/
nie moja odpowiedź rozwiązać swoje pytanie? albo wczytaj urządzenia w metodzie setUp(), jak w pytaniu, które zasugerowałem lub użyj LiipFunctionalTestBundle. – nifr
@nifr Dzięki temu, że pasuję do moich potrzeb, użyłem rozwiązania w pytaniu, które napomknąłeś ... Rozważę zalety LiipFunctionalTestBundle ... – Ousmane