2012-09-05 13 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()); 
    } 
} 

to działa OK w moich testach, ale chciałbym użyć tego przeszukiwacza również w kontrolerze. Jak mogę to zrobić?Użyj przeszukiwacza w kontrolerze

robię trasę i dodać do kontrolera:

<?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'); 
    } 

} 

ale ten powrót mi błąd:

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

Odpowiedz

4

Klasa WebTestCase to specjalna klasa, który jest przeznaczony do uruchomienia w ramach testu (PHPUnit) i nie możesz go użyć w kontrolerze.

Ale można utworzyć klienta HTTPKernel tak:

use Symfony\Component\HttpKernel\Client; 

... 

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

pamiętać, że można tylko korzystać z tego klienta, aby przeglądać własną aplikację symfony. Jeśli chcesz przeglądać zewnętrzny serwer, musisz użyć innego klienta, np. Goutte.

Robot stworzony tutaj jest ten sam robot zwrócony przez WebTestCase więc można śledzić te same przykłady wyszczególnione w symfony testing documentation

Jeżeli potrzebują Państwo więcej informacji, here jest dokumentacja dla komponentu przeszukiwacza i here jest klasa odniesienie

+0

dzięki, ale gdzie jest dokumentacja do tego? Jak mogę uzyskać na przykład DIV lub span z klasą? –

+1

Zaktualizowałem moją odpowiedź z więcej informacji –

+0

bardzo, bardzo dziękuję :) –

1

nie należy używać WebTestCase w prod środowiska, ponieważ WebTestCase::createClient() tworzy klienta testowego.

W kontrolerze należy zrobić coś takiego (polecam do korzystania 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

dzięki, +1. gdzie jest dokumentacja tej przeglądarki? Jak mogę uzyskać DOM HTML itp.? –

Powiązane problemy