Symfony 2 w/PhpUnit 3.6:更改目标主机名以进行测试

use*_*843 7 phpunit symfony

我正在以这种方式测试控制器:

$crawler = $client->request('GET', 'lang/120');
Run Code Online (Sandbox Code Playgroud)

在print_r'ing $ crawler对象后,我可以看到目标URL是http:// localhost/lang/120.但是,我的目标主机是在我的机器上设置的虚拟主机,让我们说http://www.somehost.tld,我想使用它.我应该使用什么干净的手段进行单元测试来定位虚拟主机?

我已经尝试在我的phpunit.xml.dist文件中放入一个php变量并使用它:

<php>
    <server name="HOSTNAME" value="http://www.somehost.tld/app.php/" />
</php>
Run Code Online (Sandbox Code Playgroud)

然后 :

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

但这看起来很尴尬......是否有任何配置文件(config_test文件?)我应该放置该虚拟主机名?

感谢大家的帮助!

小智 12

您还可以在服务器参数中传递HTTP_HOST以更改目标主机名:

self::createClient(array(), array(
    'HTTP_HOST' => 'sample.host.com',
));
Run Code Online (Sandbox Code Playgroud)


igo*_*orw 6

您可以将这些值设置为DIC(依赖注入容器)参数config/config_test.yml.

基本上只需添加如下:

parameters:
    myapp.test.hostname.somehost: http://www.somehost.tld
    myapp.test.hostname.otherhost: https://www.otherhost.tld
Run Code Online (Sandbox Code Playgroud)

然后,您可以在测试类上创建一个帮助器方法,以获取某个主机的URL:

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

注意:我会假设您正在使用WebTestCase.

最后,在测试中使用它:

$crawler = $client->request('GET', $this->getHostUrl('somehost', '/lang/120'));
Run Code Online (Sandbox Code Playgroud)