2015-12-04 14 views
6

Symfony uygulamasında test verilerini yüklemek için doktrin fikstürleri kullanıyorum.Symfony WebTestCase'de testteki fikstür türüne göre doktrin fikstür referansları nasıl alınır?

$this->fixtureLoader = $this->loadFixtures([ 
      "My\DemonBundle\DataFixtures\ORM\LoadEntity1Data", 
      "My\DemonBundle\DataFixtures\ORM\LoadEntity2Data", 
      "My\DemonBundle\DataFixtures\ORM\LoadEntity3Data", 
      "My\DemonBundle\DataFixtures\ORM\LoadEntity4Data", 
      "My\DemonBundle\DataFixtures\ORM\LoadEntity5Data", 
      'My\DemonBundle\DataFixtures\ORM\LoadEntity6Data' 
]); 

Test durumumda, paginated varlıkları test etmek istiyorum.

public function testGetPaginated() 
{ 

    $entities6 = $this->fixtureLoader->getReferenceRepository()->getReferences(); 

    $expected = array_slice($entities6, 3, 3); 

    $this->client = static::makeClient(); 
    $this->client->request('GET', '/api/v1/entities6', ["page" => 2, "limit" => 3, "order" => "id", "sort" => "asc"], array(), array(
     'CONTENT_TYPE' => 'application/json', 
     'HTTP_ACCEPT' => 'application/json' 
    )); 


    $this->assertSame($expected, $this->client->getResponse()->getContent()); 

} 

Armatürlerimden ve api yanıtından sayfayı karşılaştırmak istiyorum. Sorun, satırın altındaki tüm fikstür referanslarını döndürür. Test etmek istediğim varlık Entity6 türündendir. Entity6'nın diğer tüm türlere bağımlılığı var, bu yüzden hepsini yüklemem gerekiyor.

$ entities = $ this-> fixtureLoader-> getReferenceRepository() -> getReferences();

Yalnızca Entity6 türündeki öznitelikleri nasıl alabilirim? Ben türdeki başvuru edinmek için seçeneği yoktur

Doktrin \ Common \ DataFixtures \ ReferenceRepository :: getReferences kodu

/** 
* Get all stored references 
* 
* @return array 
*/ 
public function getReferences() 
{ 
    return $this->references; 
} 

içine kazılırken. Ben vekil doktrin müteşebbis yüzden sınıf tip I doktrin armatürleri gelen varlık türü başvuruları nasıl alabilirim

Proxies\__CG__\My\DemonBundle\Entity\ORM\Entity6 

alıyorum olan get_class

foreach ($references as $reference) { 
     $class = get_class($obj); 
     if ($class == "My\DemonBundle\Entity\ORM\Entity6") { 
      $expected[] = $obj; 
     } 
    } 

Ama referansları kullanarak sınıf türünü kontrol etmek bütün referanslara döngü çalıştı ? Proxies__CG__ öneklemesi bunu yapmanın en iyi yolu olmayabilir? En güvenilir yol nedir? get_class kullanmayın

cevap

0

, instanceof kullanın:

foreach ($references as $reference) { 
    if ($reference instanceof \My\DemonBundle\Entity\ORM\Entity6) { 
     $expected[] = $obj; 
    } 
} 

Doktrini vekiller böylece instanceof yerine getirerek, varlık sınıfı devralır.

İlgili konular