2012-09-05 14 views
6
// src/Acme/DemoBundle/Tests/Controller/DemoControllerTest.php 
namespace Acme\DemoBundle\Tests\Controller; 

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; 

class DemoControllerTest extends WebTestCase 
{ 
    public function testIndex() 
    { 
     $client = static::createClient(); 

     $crawler = $client->request('GET', '/demo/hello/Fabien'); 

     $this->assertGreaterThan(0, $crawler->filter('html:contains("Hello Fabien")')->count()); 
    } 
} 

esto funciona bien en mis pruebas, pero me gustaría utilizar este rastreador también en el controlador. ¿Cómo puedo hacerlo?Usar el rastreador en el controlador

I logren ruta, y añadir al controlador:

<?php 

// src/Ens/JobeetBundle/Controller/CategoryController 

namespace Acme\DemoBundle\Controller; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Acme\DemoBundle\Entity\Category; 
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; 

class CategoryController extends Controller 
{ 
    public function testAction() 
    { 
    $client = WebTestCase::createClient(); 

    $crawler = $client->request('GET', '/category/index'); 
    } 

} 

pero esto me devuelve error:

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in /acme/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Test/WebTestCase.php on line 24 

Respuesta

4

La clase WebTestCase es una clase especial que está diseñado para ser ejecutado dentro de un marco de prueba (PHPUnit) y no puedes usarlo en tu controlador.

Pero se puede crear un cliente HttpKernel así:

use Symfony\Component\HttpKernel\Client; 

... 

public function testAction() 
{ 
    $client = new Client($this->get('kernel')); 
    $crawler = $client->request('GET', '/category/index'); 
} 

en cuenta que sólo será capaz de utilizar este cliente para navegar por su propia aplicación Symfony. Si desea explorar un servidor externo, necesitará usar otro cliente como goutte.

El rastreador creado aquí es el mismo rastreador devuelto por WebTestCase para que pueda seguir los mismos ejemplos que se detallan en el Symfony testing documentation

Si necesita más información, here es la documentación para el componente de orugas y here es la clase referencia

+0

gracias, pero ¿dónde está la documentación para esto? ¿Cómo puedo obtener, por ejemplo, DIV o span con clase? –

+1

Actualicé mi respuesta con más información –

+0

muy, muy gracias :) –

1

No use WebTestCase en prod medio ambiente, porque crea WebTestCase::createClient() cliente de prueba.

En su controlador que debe hacer algo como esto (te recomiendo utilizar Buzz\Browser):

use Symfony\Component\DomCrawler\Crawler; 
use Buzz\Browser; 

... 
$browser = new Browser(); 
$crawler = new Crawler(); 

$response = $browser->get('/category/index'); 
$content = $response->getContent(); 
$crawler->addContent($content); 
+0

gracias, +1. ¿Dónde está la documentación para este navegador? ¿Cómo puedo obtener DOM html, etc.? –

Cuestiones relacionadas