2012-06-15 6 views
30

Symfony2 WebTestCase का उपयोग करना, मैं निम्नलिखित परीक्षण है:एक सिम्फनी 2 वेबटेस्टकेस में रीडायरेक्ट के बाद वर्तमान यूआरएल कैसे प्राप्त करें?

$client->request('GET', '/'); 
$this->assertTrue($client->getResponse() instanceof RedirectResponse); 

$crawler = $client->followRedirect(); 

मैं नया यूआरएल परीक्षण करने के लिए, पुनर्निर्देशन/login साथ समाप्त होता है के बाद चाहते हैं, लेकिन मैं नए URL तक पहुंचने में कोई रास्ता नहीं मिल गया है।

उत्तर

29

आप $client->getResponse()->headers->get('location') साथ वर्तमान URL मिलता है, और जोर यह /लॉगिनassertRegExp() का उपयोग कर के साथ समाप्त होता कर सकते हैं।

$client->getRequest()->getUri() 

फिर,:

$this->assertRegExp('/\/login$/', $client->getResponse()->headers->get('location')); 
+1

बस इसे चेक किया और यह काम करता है। अच्छा काम, धन्यवाद। –

+0

सिम्फनी 2.8 के लिए काम करता है। – Moonchild

+0

सिम्फनी 4 के साथ काम नहीं कर रहा है। –

19

बस की कोशिश की सफलता के बिना सामी डिन्डाने समाधान (शायद कुछ 2.0 से बदल)

वैसे भी, 2.1 में, मैं के साथ परीक्षण में वर्तमान URL को पुनः प्राप्त करने में सक्षम था आप assertRegexp() का उपयोग कर सकते हैं।

+2

सिम्फनी 2.3 –

+5

@ गैब्रियल फिलिपियाक सिम्फनी 2.3.7 के रूप में सच नहीं है, यह उत्तर काम करता है। –

11

तुम भी

$client->getHistory()->current()->getUri() 
+0

इसे आज़माएगा। –

4

आप $client->followRedirect() से पहले इस पंक्ति $client->getResponse()->getTargetUrl() जोड़ सकते हैं यूआरएल जहां पुनः निर्देशित किया जाएगा प्राप्त करने के लिए कुछ इस तरह (Symfony 2.3) कर सकते हैं

+1

बिना किसी संदेह के मेरे पसंदीदा उत्तर अगर आप रीडायरेक्ट का पालन किए बिना यूआरएल चाहते हैं। ध्यान दें कि यह आपके आईडीई में मान्य करने के लिए, आप निम्नलिखित (मेरे यूनिट परीक्षण से लिया गया है, इस प्रकार दावा): '$ this-> assertTrue ($ client-> getResponse() -> isRedirect()); /** @var रीडायरेक्ट रिस्पॉन्स $ प्रतिक्रिया */ $ प्रतिक्रिया = $ ग्राहक-> getResponse(); $ यह-> assertEquals ($ new_url, $ प्रतिक्रिया-> getTargetUrl()); ' –

0

टेस्ट से/नमूना के लिए रीडायरेक्ट/लक्ष्य (पूर्ण यूआरएल भी हो सकता है)

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

$this->assertTrue($client->getResponse() instanceof RedirectResponse); 
$this->assertTrue($client->getResponse()->isRedirect('/target')); 
संबंधित मुद्दे