2012-07-18 25 views
7

İşlevsel sınamalarımı ayarlamaya çalışıyorum ve kimlik doğrulamasıyla ilgili sorun yaşıyorum. Bu kılavuzu okudum: http://symfony.com/doc/current/cookbook/testing/http_authentication.html ve yapmaları gerekenleri uyguladılar, ancak hala girişleri yeniden yönlendirirken takılıyorum. Eminim bu önemsiz bir şey ama emin değilim. isteğinSymfony2 işlevsel sınama kimlik doğrulaması

Testi Denetleyici

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: 

Sonucu

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 
) 

Bir y bu konuda nasıl geçeceğine dair öneriler?

+1

erişmek senin FOSUserBundle kullanıyorsanız, http://stackoverflow.com/questions/14957807/symfony2-tests-with-fosuserbundle/27223293# bakmak lütfen 27223293 –

cevap

8

Ya kullanım:

$crawler = $client->followRedirect(); 

veya müşteri daima yönlendirmeleri yapmak:

$client->followRedirects(); 

İlgili doc:

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

+0

Teşekkürler. Bu beni giriş sayfasına götürecek gibi görünüyor, nasıl kimlik doğrulaması için alabilirim? – greg

+0

Sanırım tarayıcıyı oturum açmayı simüle etmek için bir yöntem yaratabilirim, ancak ideal olarak PHP_AUTH vars ile çalışabilirim – greg

+0

Bunu denediniz mi? http://symfony.com/doc/current/cookbook/testing/http_authentication.html –

8

aşağıdakileri yapmak gerekir) 'sayfaya göz at'

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

2) izleyin) yönlendirme

$crawler = $client->followRedirect(); 
formu

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

4 veri olarak giriş kimlik geçmek Gönder düğmesini

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

3) yoluyla formu seçip göndermek

5) Bu noktada, yanıt c'yi kontrol edebilmelisiniz. gazel

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

veya güvenli bir sayfa

$crawler = $client->request('GET', '/dashboard'); 
//do other stuff 
İlgili konular