Absolute URL 在 Symfony2 WebCaseTest 中失败

Absolute URL fails in Symfony2 WebCaseTest

以下代码总是导致找不到路由。但路线确实存在。

$client = static::createClient();
$crawler = $client->request(
   'GET', 
   '/app_dev.php/admin/', 
   array(), 
   array(), 
   array("HTTP_HOST" => "dev.example:8080"));

但总是失败。如果我在我的浏览器中转到 http://dev.example:8080/app_dev.php/admin/ 那么它工作正常。

好像 PHPUnit 无法看到那个主机?

$crawler->request() 不应接收实际的 URI,而是前端控制器之后的部分。所以在你的情况下,使用:

$client = static::createClient();
$crawler = $client->request(
   'GET', 
   '/admin/', 
   array(), 
   array(), 
   array("HTTP_HOST" => "dev.example:8080"));

这背后的原因是客户端实际上并没有(向主机)请求页面。它只是模拟一个请求,通过创建一个 Request 对象,将它传递给 AppKernel 然后解析 Response。这样快多了。

如果您想使用真实请求进行测试,我建议安装并使用 Mink or Goutte