DoctrineFixturesBundle이 설치되어 있고 조명기를 명령 줄에서로드 할 수 있지만 기능 테스트에서 조명기를로드하려면 어떻게해야합니까?Symfony 2의 기능 테스트에서 조명기를로드하는 방법
답변
this question에서 볼 수 있듯이 테스트의 setUp()
메소드에서 조명기를로드 할 수 있습니다.
질문에 코드를 사용할 수 있지만 --append
을 doctrine:fixtures:load
명령에 추가해야합니다. 이는 fixtures-bundle에 의한 확인을 피하기 위해서입니다.
더 나은 해결 방법은 데이터 고정 장치를 사용하는 것이 더 쉬운 LiipFunctionalTestBundle을 살펴 보는 것입니다.
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);
}
이것은 모든 ReferenceRepository 항목을 놓친 것입니다 - addRef/getRef –
: 당신은 그냥 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를 사용하는 동일한 옵션을 가지고 있습니다. 도움이되기를 바랍니다.
안녕하세요, 저는 당신의 접근 방식을 사용하지만'$ executor' 의도를 사용하여 관련된 테이블뿐만 아니라 전체 데이터베이스를 삭제하십시오. 왜 그런 행동입니까? 조명기가로드되는 동안 생성 된 데이터를 제거하는 방법에 대한 예는 무엇입니까? – ReynierPM
이미 언급했듯이 LiipFunctionalTestBundle을 사용하는 것이 좋습니다. 그런 다음 Liip \ FunctionalTestBundle \ Test \ WebTestCase에서 WebTestCase를 확장해야합니다. 이것은 $this->loadFixtures()
을 호출 할 수 있습니다.이 배열은 조명기 배열을 인수로 사용합니다. http://marcjuch.li/blog/2014/04/06/symfony2-rest-functional-testing-with-fixtures/
내 대답은 질문을 해결 않았다 자세한 내용
나는 짧은 블로그 게시물을 썼다? LiipFunctionalTestBundle을 사용하거나 질문 할 때와 같이 setUp() 메서드에서 조명기를로드하십시오. – nifr
@nifr 내 요구 사항에 맞춰 주셔서 감사합니다. 당신이 암시 한 질문에 해결책을 사용했습니다 ... 나는 LiipFunctionalTestBundle의 이점을 고려할 것입니다 ... – Ousmane