symfony2控制器的功能测试:如何生成路由

时间:2013-03-19 08:30:04

标签: php unit-testing symfony controller phpunit

在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路径。

我无法对其进行硬编码,因为我并不孤单。那么获得正确路线的方法是什么,还是有其他方法来测试控制器?

2 个答案:

答案 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