在symfony2控制器上,我想测试一个返回Response
对象的控制器。我的测试类从WebTestCase
延伸。我使用static::createClient()
来获得一个可操作的客户端。
我的问题是使用虚拟主机在当前安装上调用好路径。
$client->getContainer()->get('router')->generate('my_route', array(), true)
生成一个localhost作为主机的路由。但这并不起作用,因为我将myproject.local作为主持人。
$client->getContainer()->get('kernel')->getRootDir()
和其他dir方法提供linux文件路径,而不是web路径。
我无法对其进行硬编码,因为我并不孤单。那么获得正确路线的方法是什么,还是有其他方法来测试控制器?
答案 0 :(得分:12)
Symfony2的内置测试框架(WebTestCase)只需要能够在不同环境中测试应用程序的相对路径:
$client->getContainer()->get('router')->generate('my_route', array(), false);
Symfony模拟http客户端并针对为该测试创建的内核实例进行测试。没有涉及Web服务器。
您可以在此处详细了解客户端模拟的工作原理: http://symfony.com/doc/current/book/testing.html#working-with-the-test-client
答案 1 :(得分:8)
正如Symfony文档中所提到的,您应该使用绝对网址,因为更改网址会影响最终用户,这也是您在功能测试中要涵盖的内容。
“硬编码请求URL是功能测试的最佳实践。如果测试使用Symfony路由器生成URL,它将不会检测到可能影响最终用户的应用程序URL的任何更改。”
在此处查看更多信息:http://symfony.com/doc/current/book/testing.html#working-with-the-test-client