2012-07-18 13 views
7

Estoy intentando configurar mis pruebas funcionales y tengo problemas para autenticarme. He leído esta guía: http://symfony.com/doc/current/cookbook/testing/http_authentication.html e implementado lo que han dicho que haga, pero sigo atascado al redirigir el inicio de sesión. Estoy seguro de que esto es algo trivial, pero no estoy seguro de qué.Autenticación de prueba funcional Symfony2

Test Controller

namespace HvH\ClientsBundle\Tests\Controller; 

use HvH\ClientsBundle\Controller\ClientsController; 

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\HeaderBag; 
use Symfony\Component\HttpFoundation\Session; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

class ClientsControllerTest extends WebTestCase 
{ 

    public function testGetClientsAction() 
    { 

     $client = static::createClient(); 

     $client->request(
      '/clients/123456', 
      'GET', 
      array(), /* request params */ 
      array(), /* files */ 
      array('X-Requested-With' => "XMLHttpRequest", 'PHP_AUTH_USER' => 'testuser', 'PHP_AUTH_PW' => 'testpass') 
     ); 

     print_r($client->getResponse()); 
     die(); 
    } 
} 

congif_test.yml

security: 
    firewalls: 
     secured_area: 
      http_basic: 

resultado de la solicitud

Symfony\Component\HttpFoundation\RedirectResponse Object 
(
    [headers] => Symfony\Component\HttpFoundation\ResponseHeaderBag Object 
     (
      [computedCacheControl:protected] => Array 
       (
        [no-cache] => 1 
       ) 

      [cookies:protected] => Array 
       (
        [] => Array 
         (
          [/] => Array 
           (
            [PHPSESSID] => Symfony\Component\HttpFoundation\Cookie Object 
             (
              [name:protected] => PHPSESSID 
              [value:protected] => 7e3ece541918264de0003e2dcd251833 
              [domain:protected] => 
              [expire:protected] => 1342616045 
              [path:protected] =>/
              [secure:protected] => 
              [httpOnly:protected] => 
             ) 

           ) 

         ) 

       ) 

      [headers:protected] => Array 
       (
        [location] => Array 
         (
          [0] => http://localhost/login 
         ) 

        [cache-control] => Array 
         (
          [0] => no-cache 
         ) 

        [date] => Array 
         (
          [0] => Wed, 18 Jul 2012 00:54:05 GMT 
         ) 

        [content-type] => Array 
         (
          [0] => text/html 
         ) 

        [x-debug-token] => Array 
         (
          [0] => 5006092d43848 
         ) 

       ) 

      [cacheControl:protected] => Array 
       (
       ) 

     ) 

    [content:protected] => <!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <meta http-equiv="refresh" content="1;url=http://localhost/login" /> 

     <title>Redirecting to http://localhost/login</title> 
    </head> 
    <body> 
     Redirecting to <a href="http://localhost/login">http://localhost/login</a>. 
    </body> 
</html> 
    [version:protected] => 1.0 
    [statusCode:protected] => 302 
    [statusText:protected] => Found 
    [charset:protected] => UTF-8 
) 

Un y sugerencias sobre cómo evitar esto?

+1

Si su están utilizando FOSUserBundle, por favor vaya a http://stackoverflow.com/questions/14957807/symfony2-tests-with-fosuserbundle/27223293# 27223293 –

Respuesta

8

De cualquier uso:

$crawler = $client->followRedirect(); 

o hacer que el cliente siempre vuelve a dirigir:

$client->followRedirects(); 

doc relacionadas: http://symfony.com/doc/current/book/testing.html#redirecting

+0

Gracias. Eso parece llevarme a la página de inicio de sesión, ¿cómo puedo autenticarlo? – greg

+0

Supongo que podría crear un método para que el rastreador simule el inicio de sesión, pero idealmente podría funcionar solo con los vars PHP_AUTH – greg

+0

¿Ha probado esto? http://symfony.com/doc/current/cookbook/testing/http_authentication.html –

8

usted debería ser capaz de hacer lo siguiente:

1) 'navegar' a la página

$client = static::createClient(); 
$crawler = $client->request('GET', '/login'); 

2) Seleccione la forma a través del botón de enviar

$buttonCrawlerNode = $crawler->selectButton('submit'); 

3) Pasar las credenciales de acceso que los datos y enviar el formulario

$form = $buttonCrawlerNode->form(); 
$data = array('username' => '[email protected]','password' => 'pass'); 
$client->submit($form,$data); 

4) Siga la redirección

$crawler = $client->followRedirect(); 

5) En este punto, debería poder comprobar la respuesta c oda

$this->assertEquals(302, $client->getResponse()->getStatusCode()); 

o acceder a una página segura

$crawler = $client->request('GET', '/dashboard'); 
//do other stuff 
Cuestiones relacionadas