2013-03-19 17 views
10

Na kontrolerze symfony2 chciałbym przetestować kontroler, który zwraca obiekt Response. Moja klasa testowa rozciąga się od WebTestCase. Używam static::createClient(), aby uzyskać klienta operacyjnego.Test funkcjonalny kontrolera symfony2: Jak wygenerować trasę

Mój problem polega na tym, że wywołuje dobrą trasę na mojej bieżącej instalacji z wirtualnym hostem.

$client->getContainer()->get('router')->generate('my_route', array(), true) wygenerować trasę z localhost jako host. Ale to nie działa, ponieważ mam myproject.local jako host.

$client->getContainer()->get('kernel')->getRootDir() i inne metody dir zapewniają ścieżkę do pliku linux, a nie ścieżkę sieciową.

Nie mogę tego zakodować, ponieważ nie jestem sam w projekcie. Jaka jest więc metoda uzyskania poprawnej trasy lub czy istnieje inny sposób testowania kontrolera?

+0

Dlaczego przejść 'true' jako trzeci argument do' metody generate'? Czy naprawdę potrzebujesz generowanego bezwzględnego adresu URL? –

+0

Tak, ponieważ domyślny adres URL jest również połączony przez localhost. Lub potrzebuję innej metody przetestowania kontrolera. – AlphaB

+0

Czy nie używasz klienta testowego dostarczonego przez Symfony? –

Odpowiedz

9

Symfony2 wbudowanego w ramach testu (WebTestCase) tylko potrzebuje ścieżkę względną, aby móc testować aplikacje w różnych środowiskach:

$client->getContainer()->get('router')->generate('my_route', array(), false); 

Symfony symuluje klienta HTTP i testy przed instancją Kernel stworzonej do tego test. Nie ma żadnych serwerów internetowych.

Możesz przeczytać więcej o tym, jak symulacja klient pracuje tutaj: http://symfony.com/doc/current/book/testing.html#working-with-the-test-client

7

Jak wspomniano w dokumentacji Symfony, należy użyć bezwzględnych adresów URL, ponieważ zmiana adresów wpłynie na użytkowników końcowych i to co chcesz pokrycie w także twoje testy funkcjonalne.

"Kodowanie na żądanie adresów URL jest najlepszą praktyką w przypadku testów funkcjonalnych Jeśli test generuje adresy URL za pomocą routera Symfony, nie wykryje żadnych zmian wprowadzonych w adresach URL aplikacji, które mogą mieć wpływ na użytkowników końcowych."

Zobacz więcej informacji tutaj: http://symfony.com/doc/current/book/testing.html#working-with-the-test-client

+2

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj istotne części odpowiedzi i podać odnośnik. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. – serenesat

+0

Witam @serensat dzięki za podpowiedź, rozumiem. Właśnie dodałem cytat z istotnej części. – honzalilak

Powiązane problemy