Symfony 2 с PhpUnit 3.6: изменение целевого имени хоста для целей тестирования - PullRequest
7 голосов
/ 07 ноября 2011

Я тестирую контроллер таким образом:

$crawler = $client->request('GET', 'lang/120');

После печати_объекта $ crawler я вижу, что целевой URL равен http://localhost/lang/120. Однако мой целевой хост - это виртуальный хост, настроенный на моем компьютере, скажем, http://www.somehost.tld, и я Я хотел бы использовать это. Какие чистые средства я должен использовать для своих модульных тестов, нацеленных на этот виртуальный хост?

Я попытался поместить переменную php в мой файл phpunit.xml.dist и использовать ее:

<php>
    <server name="HOSTNAME" value="http://www.somehost.tld/app.php/" />
</php>

А потом:

$crawler = $client->request('GET', $_SERVER['HOSTNAME'] . 'lang/120');

Но это выглядит неловко ... Есть ли файл конфигурации (файл config_test?), Куда я должен поместить это имя виртуального хоста?

Спасибо за помощь всем!

Ответы [ 3 ]

12 голосов
/ 24 декабря 2013

Вы также можете передать HTTP_HOST в параметрах сервера, чтобы изменить имя целевого хоста:

self::createClient(array(), array(
    'HTTP_HOST' => 'sample.host.com',
));
6 голосов
/ 07 ноября 2011

Вы можете установить эти значения в качестве параметров DIC (Dependency Injection Container) в config/config_test.yml.

В основном просто добавьте их так:

parameters:
    myapp.test.hostname.somehost: http://www.somehost.tld
    myapp.test.hostname.otherhost: https://www.otherhost.tld

Затем вы можете создать вспомогательный методв вашем тестовом классе, чтобы получить URL для определенного хоста:

private function getHostUrl($hostId, $path = '')
{
    return self::$kernel->getContainer()->getParameter('myapp.test.hostname.'.$hostId).$path;
}

Примечание: я предполагаю, что вы используете WebTestCase.

Наконец, используйте это вваш тест:

$crawler = $client->request('GET', $this->getHostUrl('somehost', '/lang/120'));
2 голосов
/ 15 июня 2017

Согласно igorw, если у вас есть имя хоста в качестве параметра в файле конфигурации, например:

#config/config_test.yml
parameters:
    myapp_hostname: "http://www.myapp.com"

В вашем WebTestCase вы можете получить имя хоста из параметров и установить параметр HTTP_HOST для клиента:

$client = self::createClient();
$hostname = $client->getContainer()->getParameter('myapp_hostname');
$client->setServerParameter('HTTP_HOST', $hostname );
$client->request('GET', '/lang/120');

В тестируемом коде объект Request содержит имя хоста:

'http://www.myapp.com/lang/120' === $request->getUri();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...