14

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

我不能硬编码它,因为我并不孤单。那么获取正确路由的方法是什么,或者还有其他方法可以测试控制器吗?

4

2 回答 2

14

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

于 2013-03-19T21:24:19.767 回答
10

正如 Symfony 文档中提到的,你应该使用绝对 URL,因为 URL 的变化会影响你的最终用户,这也是你想要在功能测试中涵盖的内容。

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

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

于 2015-08-05T08:03:53.413 回答