2012-06-15 31 views

Odpowiedz

29

można uzyskać bieżący URL z $client->getResponse()->headers->get('location') i twierdzić, że kończy się /login użyciu assertRegExp().

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

Właśnie to sprawdziłem i to działa. Dobra robota, dziękuję. –

+0

Działa dla Symfony 2.8. – Moonchild

+0

Wygląda na to, że nie działa z Symfony 4. –

19

prostu starał rozwiązanie Samy Dindane bez powodzenia (może coś się zmieniło od 2,0)

W każdym razie, w pkt 2.1, udało mi się odzyskać bieżący adres URL w teście z:

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

Następnie możesz użyć assertRegexp().

+2

Nieprawda w symfony 2.3 –

+5

@GabrielFilipiak Od wersji Symfony 2.3.7 ta odpowiedź działa. –

11

Można też zrobić coś takiego (Symfony 2.3)

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

Spróbuje. –

4

Możesz dodać ten wiersz $client->getResponse()->getTargetUrl() przed $client->followRedirect() aby uzyskać adres URL, gdzie zostaniesz przekierowany

+1

Bez wątpienia moja preferowana odpowiedź, jeśli chcesz URL bez następującego przekierowania. Zauważ, że aby dokonać tej walidacji w twoim IDE, możesz wykonać następujące czynności (pobrane z mojego testu jednostkowego, a więc asercje): '$ this-> assertTrue ($ client-> getResponse() -> isRedirect()); /** @var RedirectResponse $ response */ $ response = $ client-> getResponse(); $ this-> assertEquals ($ new_url, $ response-> getTargetUrl()); ' –

0

test przekierowania z/próbki/target (może to być także adres URL bezwzględny)

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

$this->assertTrue($client->getResponse() instanceof RedirectResponse); 
$this->assertTrue($client->getResponse()->isRedirect('/target')); 
Powiązane problemy