2011-11-07 19 views
7

मुझे लगता है कि फैशन में एक नियंत्रक का परीक्षण कर रहा हूँ के लिए लक्ष्य होस्ट नाम बदल रहा है:Symfony 2 डब्ल्यू/PHPUnit 3.6: परीक्षण प्रयोजनों

$crawler = $client->request('GET', 'lang/120'); 

$ क्रॉलर वस्तु मैं देख सकता हूँ कि लक्ष्य यूआरएल http://localhost/lang/120 है print_r'ing पर। हालांकि, मेरा लक्ष्य होस्ट मेरी मशीन पर स्थापित वर्चुअल होस्ट है, मान लें कि http://www.somehost.tld और मैं इसका उपयोग करना चाहता हूं। उस वर्चुअल होस्ट को लक्षित करने के लिए मेरे यूनिट परीक्षणों के लिए मुझे किस स्वच्छ साधन का उपयोग करना चाहिए?

मैं अपने phpunit.xml.dist फ़ाइल में एक php चर डालने की कोशिश की और इसका इस्तेमाल किया है:

<php> 
    <server name="HOSTNAME" value="http://www.somehost.tld/app.php/" /> 
</php> 

और फिर: वहाँ

$crawler = $client->request('GET', $_SERVER['HOSTNAME'] . 'lang/120'); 

लेकिन उस अजीब लग रहा है ... है किसी भी कॉन्फ़िगरेशन फ़ाइल (config_test फ़ाइल?) जहां मुझे वह वर्चुअल होस्टनाम रखना चाहिए?

मदद करने के लिए धन्यवाद, हर कोई!

उत्तर

6

आप उन मानों को config/config_test.yml में डीआईसी (निर्भरता इंजेक्शन कंटेनर) पैरामीटर के रूप में सेट कर सकते हैं।

मूल रूप से सिर्फ उन्हें इस तरह जोड़ें:

private function getHostUrl($hostId, $path = '') 
{ 
    return self::$kernel->getContainer()->getParameter('myapp.test.hostname.'.$hostId).$path; 
} 

नोट::

parameters: 
    myapp.test.hostname.somehost: http://www.somehost.tld 
    myapp.test.hostname.otherhost: https://www.otherhost.tld 

तो फिर तुम एक निश्चित मेजबान के लिए यूआरएल पाने के लिए अपने परीक्षण वर्ग पर एक सहायक विधि बना सकते हैं मैं हूँ मान लें कि आप WebTestCase का उपयोग कर रहे हैं। अगर आपके पास,

self::createClient(array(), array(
    'HTTP_HOST' => 'sample.host.com', 
)); 
+0

यह ठीक लगता है, इगोर, धन्यवाद:

$client = self::createClient(); $hostname = $client->getContainer()->getParameter('myapp_hostname'); $client->setServerParameter('HTTP_HOST', $hostname); $client->request('GET', '/lang/120'); 

परीक्षण करने के लिए अपने कोड में, अनुरोध वस्तु होस्ट नाम शामिल हैं! हालांकि, यह एक स्थिर स्थिर संपत्ति \ .. \ .. \ LanguageControllerTest :: $ कर्नेल को गैर स्थैतिक के रूप में ट्रिगर करेगा ... जिसे "self :: $ kernel -> ..." – user772843

+0

का उपयोग करके हल किया गया है, मेरा बुरा, ऐसा लगता है यह किसी बिंदु पर बदला गया था। यह वास्तव में अब स्वयं :: $ कर्नेल होना चाहिए। मेरे जवाब को ठीक करना – igorw

12

तुम भी सर्वर मानकों में HTTP_HOST पारित कर सकते हैं लक्ष्य होस्ट नाम बदलने के लिए कॉन्फ़िगरेशन फ़ाइल में पैरामीटर के रूप में आपका होस्टनाम, जैसे:

#config/config_test.yml 
parameters: 
    myapp_hostname: "http://www.myapp.com" 

अपने वेबटेस्टकेस में, आप प्राप्त कर सकते हैं मापदंडों से होस्ट नाम, और ग्राहक के लिए HTTP_HOST पैरामीटर सेट:

'http://www.myapp.com/lang/120' === $request->getUri(); 
2

igorw के अनुसार:

अंत में, अपने परीक्षण में इस का उपयोग करने के:

$crawler = $client->request('GET', $this->getHostUrl('somehost', '/lang/120')); 
संबंधित मुद्दे