2015-12-04 9 views
6

मैं अपने सिम्फनी एप्लिकेशन में परीक्षण डेटा लोड करने के लिए सिद्धांत फिक्स्चर का उपयोग कर रहा हूं।symfony WebTestCase में परीक्षण में स्थिरता के प्रकार द्वारा सिद्धांत फ़िक्स्चर संदर्भ कैसे प्राप्त करें?

$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' 
]); 

मेरे परीक्षण मामले में, मैं पेजिनेटेड इकाइयों को प्राप्त करना चाहता हूं।

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()); 

} 

मैं अपने फिक्स्चर और एपीआई प्रतिक्रिया से पृष्ठ की तुलना करना चाहता हूं। समस्या नीचे है सभी लाइन संदर्भ संदर्भ देता है। जिस इकाई को मैं परीक्षण करना चाहता हूं वह एंटीटी 6 टाइप है। Entity6 की सभी अन्य प्रकारों पर निर्भरता है इसलिए मुझे उन सभी को लोड करना होगा।

$ संस्थाएं = $ यह-> स्थिरता लोडर-> getReferenceRepository() -> getReferences();

मैं केवल Entity6 प्रकार के रिफ्रेंस कैसे प्राप्त करूं? मैं

सिद्धांत \ Common \ DataFixtures \ ReferenceRepository :: getReferences कोड

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

में digged वहाँ विशेष प्रकार के संदर्भ प्राप्त करने के लिए कोई विकल्प नहीं है। मैं get_class

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

लेकिन संदर्भों का उपयोग वर्ग प्रकार की जांच करने के लिए कर रहे हैं प्रॉक्सी सिद्धांत entitites तो मैं वर्ग प्रकार

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

मैं कैसे सिद्धांत जुड़नार से इकाई प्रकार के संदर्भ मिलता है हो रही है सभी संदर्भों पर पाशन की कोशिश की ? Proxies__CG__ उपसर्ग करना ऐसा करने का सबसे अच्छा तरीका नहीं हो सकता है? सबसे विश्वसनीय तरीका क्या है?

उत्तर

0

get_class का उपयोग न करें, instanceof का उपयोग करें:

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

सिद्धांत प्रॉक्सी, इकाई वर्ग के वारिस इस प्रकार instanceof को पूरा करने।

संबंधित मुद्दे