PHPUnit +豹劫持/拦截/管理路由

时间:2019-12-26 17:01:09

标签: php symfony phpunit symfony-panther

在一个现有的Symfony项目中,该项目在PHPUnit中具有可运行的测试,我从使用Browser-Kit切换到Panther(以解决有关JavaScript的测试缺点)。

首先,将测试迁移到Panther似乎很简单。但是后来我无法通过Web应用程序管理面板的测试。对任何路由/admin/*的所有请求均返回非常“ phpinfo()-/ apache-feely”的404响应:

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>404 Not Found</title><style>
body { background-color: #fcfcfc; color: #333333; margin: 0; padding:0; }
h1 { font-size: 1.5em; font-weight: normal; background-color: #9999cc; min-height:2em; line-height:2em; border-bottom: 1px inset black; margin: 0; }
h1, p { padding-left: 10px; }
code.url { background-color: #eeeeee; font-family:monospace; padding:0 2px;}
</style>
</head><body><h1>Not Found</h1><p>The requested resource <code class="url">/admin/company/new</code> was not found on this server.</p></body></html>

其他不存在的路由返回常规的symfony异常/错误调试页面。

如果我将管理控制器映射到其他路由(例如/administration/*),则会得到预期/正确的响应。

此外,我无法在PHPUnit / Panther管道之外重现该问题,可以这么说:如果我(启用并)在测试环境中运行内部服务器(symfony / web-server-bundle),则会收到在/admin/*路由上也预期/正确的响应。

如果我将PHPUnit / Panther设置为使用其他端口,则问题仍然存在。

我不知道PHPUnit / Panther使用哪个服务器实例(也是因为在错误的404响应中不明显),但是似乎该服务器实例专门拦截了{{1 }}路由到symfony网络应用程序范围之外,以响应404。

有人知道PHPUnit / Panther幕后正在启动什么服务器实例吗,甚至我可以在哪里禁用错误拦截的路由?

OS: Ubuntu 18.04
PHP: 7.2.24-0ubuntu0.18.04.1
Symfony: 4.4
PHPUnit: 7.5

1 个答案:

答案 0 :(得分:0)

Panther 使用稍微不同的参数/设置启动 PHP 调试服务器,这不允许与 public 目录中的文件夹同名的路由共存。 symfony 集成的 web 服务器和生产服务器(apache 和 nginx)很高兴地为这种重叠的路由提供服务,映射到公共文件夹中的控制器和资源。

参见 Panther 问题 #491