如何在Symfony2 WebTestCase中重定向后获取当前URL?

i.a*_*iel 35 testing symfony

使用Symfony2 WebTestCase,我有以下测试:

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

$crawler = $client->followRedirect();
Run Code Online (Sandbox Code Playgroud)

我想在重定向结束测试新的url,/login但是我发现无法访问新的URL.

Sam*_*ane 34

你可以使用目前的网址$client->getResponse()->headers->get('location'),并断言其结尾/登录使用assertRegExp().

$this->assertRegExp('/\/login$/', $client->getResponse()->headers->get('location'));
Run Code Online (Sandbox Code Playgroud)


Mas*_*one 23

刚试过Samy Dindane的解决方案没有成功(也许是从2.0改变了)

无论如何,在2.1中,我能够在测试中检索当前的URL:

$client->getRequest()->getUri()
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用assertRegexp().

  • @GabrielFilipiak从Symfony 2.3.7开始,这个答案有效. (6认同)
  • 在symfony 2.3中不正确 (2认同)

Gab*_*iak 13

你也可以这样做(Symfony 2.3)

$client->getHistory()->current()->getUri()
Run Code Online (Sandbox Code Playgroud)


Vic*_*hin 6

您可以$client->getResponse()->getTargetUrl()在之前添加此行$client->followRedirect()以获取将重定向到的URL

  • 毫无疑问,如果您想要URL而无需遵循重定向,则是我的首选答案。注意,为了在IDE中进行验证,可以执行以下操作(取自我的单元测试,即断言):`$ this-> assertTrue($ client-> getResponse()-> isRedirect()); / ** @var RedirectResponse $ response * / $ response = $ client-> getResponse(); $ this-> assertEquals($ new_url,$ response-> getTargetUrl());` (2认同)