2013-06-13 5 views
19

DoctrineFixturesBundle이 설치되어 있고 조명기를 명령 줄에서로드 할 수 있지만 기능 테스트에서 조명기를로드하려면 어떻게해야합니까?Symfony 2의 기능 테스트에서 조명기를로드하는 방법

+0

내 대답은 질문을 해결 않았다 자세한 내용

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

나는 짧은 블로그 게시물을 썼다? LiipFunctionalTestBundle을 사용하거나 질문 할 때와 같이 setUp() 메서드에서 조명기를로드하십시오. – nifr

+0

@nifr 내 요구 사항에 맞춰 주셔서 감사합니다. 당신이 암시 한 질문에 해결책을 사용했습니다 ... 나는 LiipFunctionalTestBundle의 이점을 고려할 것입니다 ... – Ousmane

답변

14

this question에서 볼 수 있듯이 테스트의 setUp() 메소드에서 조명기를로드 할 수 있습니다.

질문에 코드를 사용할 수 있지만 --appenddoctrine:fixtures:load 명령에 추가해야합니다. 이는 fixtures-bundle에 의한 확인을 피하기 위해서입니다.

더 나은 해결 방법은 데이터 고정 장치를 사용하는 것이 더 쉬운 LiipFunctionalTestBundle을 살펴 보는 것입니다.

16

symfony의 WebTestCase을 사용하는 경우 실제로는 매우 쉬운 방법으로 조명기를로드 할 수 있습니다. 당신의 조명기는 FixtureInterface을 구현해야합니다; 따라서 테스트의 setUp() 메소드에서 직접 load() 메소드라고 부를 수 있습니다. 난 그냥 당신이 먼저 이전의 테스트 데이터의 테이블을 제거하려면 약간 깔끔한 접근 방식을 제공하고 싶었

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

    $fixture = new YourFixture(); 
    $fixture->load($entityManager); 
} 
+0

이것은 모든 ReferenceRepository 항목을 놓친 것입니다 - addRef/getRef –

3

: 당신은 그냥 EntityManager 심포니 컨테이너에서 aquired 할 수 load() 방법에 통과해야 예 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(); 
} 

이기구는 (당신이 추가 고정 방법에 더 밀어 수),로드, 그들이로드하기 전에 테이블을 제거 할 수 있습니다. 또한 MongoDB는 MongoDBPurger와 MongoDBExecutor를 사용하는 동일한 옵션을 가지고 있습니다. 도움이되기를 바랍니다.

+1

안녕하세요, 저는 당신의 접근 방식을 사용하지만'$ executor' 의도를 사용하여 관련된 테이블뿐만 아니라 전체 데이터베이스를 삭제하십시오. 왜 그런 행동입니까? 조명기가로드되는 동안 생성 된 데이터를 제거하는 방법에 대한 예는 무엇입니까? – ReynierPM