我正在以这种方式测试控制器:
$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)
您可以将这些值设置为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)
归档时间: |
|
查看次数: |
4911 次 |
最近记录: |