2013-03-19 47 views
10

在symfony2控制器上,我想测试一个控制器,它返回一个Response对象。我的测试课程从WebTestCase延伸。我使用static::createClient()来获得运营客户端。symfony2控制器的功能测试:如何生成路径

我的问题是在我当前安装的虚拟主机上调用好路由

$client->getContainer()->get('router')->generate('my_route', array(), true)以本地主机为主机生成路由。但是这不起作用,因为我的主机是myproject.local。

$client->getContainer()->get('kernel')->getRootDir()和其他dir方法提供的linux文件路径,不是web路径。

我不能硬编码,因为我并不孤单。那么获得正确路线的方法是什么?还是有另一种方法来测试控制器?

+0

为什么你传递TRUE;作为第三个参数'generate'方法?你真的需要一个绝对的URL生成吗? – 2013-03-19 12:05:07

+0

是的,因为默认网址也通过本地主机链接。 或者我需要另一种方法来测试我的控制器。 – AlphaB 2013-03-19 12:26:12

+0

是不是使用Symfony提供的测试客户端? – 2013-03-19 12:32:04

回答

9

Symfony2中内置的测试框架(WebTestCase)只需要相对路径,以便能够在不同的环境中测试应用程序:

$client->getContainer()->get('router')->generate('my_route', array(), false); 

Symfony的模拟HTTP客户端和测试针对的内核为创建一个实例测试。没有涉及网络服务器。

你可以阅读更多有关客户端的模拟如何在这里工作: http://symfony.com/doc/current/book/testing.html#working-with-the-test-client

7

因为symfony文档中提到的,你应该使用绝对路径,因为URL的变化会影响您的最终用户和多数民众赞成你在想盖你的功能测试也是。

“对请求URL进行硬编码是功能测试的最佳实践,如果测试使用Symfony路由器生成URL,它将不会检测到可能影响最终用户的应用程序URL的任何更改。

这里查看更多信息:http://symfony.com/doc/current/book/testing.html#working-with-the-test-client

+2

虽然这个链接可能回答这个问题,但最好在这里包含答案的基本部分并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 – serenesat 2015-08-05 09:42:19

+0

嗨@serensat感谢提示,我明白了这一点。我只是添加了关键部分的引用。 – honzalilak 2015-08-06 12:57:22