Функциональный тест контроллера symfony2: как создать маршрут

На контроллере symfony2 я хотел бы протестировать контроллер, который возвращает объект Response. Мой тестовый класс простирается от WebTestCase. Я использую static::createClient() для получения операционного клиента.

Моя проблема , чтобы вызвать хороший маршрут в моей текущей установке с помощью виртуального хоста.

$client->getContainer()->get('router')->generate('my_route', array(), true) создать маршрут с локальным хостом в качестве хоста. Но это не работает, поскольку у меня есть myproject.local как хост.

$client->getContainer()->get('kernel')->getRootDir() и другой метод dir обеспечивают путь к файлу Linux, а не веб-путь.

Я не могу его жестко закодировать, поскольку я не одинок в проекте. Итак, каков метод для получения правильного маршрута или есть другой способ проверить контроллер?

Ответ 1

Symfony2, встроенный в тестовую среду (WebTestCase), нуждается только в относительном пути для тестирования приложений в разных средах:

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

Symfony моделирует http-клиент и тестирует экземпляр ядра, созданного для этого теста. Нет веб-серверов.

Вы можете узнать больше о том, как работает имидж клиента: http://symfony.com/doc/current/book/testing.html#working-with-the-test-client

Ответ 2

Как упоминалось в документации Symfony, вы должны использовать абсолютные URL-адреса, поскольку изменение URL-адресов будет влиять на ваших конечных пользователей, и это то, что вы хотите покрыть в своих функциональных тестах.

"Жесткое кодирование URL-адресов запросов является наилучшей практикой для функциональных тестов. Если тест генерирует URL-адреса с использованием маршрутизатора Symfony, он не обнаружит изменений, внесенных в URL-адреса приложений, которые могут повлиять на конечных пользователей".

Подробнее см. здесь: http://symfony.com/doc/current/book/testing.html#working-with-the-test-client