我们最近一直在尝试进行集成测试,以与CakePHP 3.7应用程序一起使用。但是,在测试过程中找到要找到的路线时遇到了问题。
由于路由被添加为中间件,因此我们将Application类加载到Application::middleware()
中。我们所有的插件都已加载到Application::bootstrap()
和Application::bootstrapCli()
中。
当在$ this-> get或$ this-> post调用之前转储Router :: routes()时,我们会看到所有路由,但是一旦完成$ this-> get,我们便转储了带有$this->_request->getStatusCode()
的响应代码,我们得到一个404,$this->_getBodyAsString()
生成一个HTML文件,并显示错误消息:缺少路线。
阅读有关Integration testing的食谱,似乎在自定义Application类的情况下需要使用$this->useHttpServer(true)
,但是我们使用标准的App \ Application
我们发现的唯一可行的方法是通过使用CakePHP骨架应用程序中找到的route.php(由于后备),或者使用$this->get(['controller' => 'class', 'action' => 'method'])
但是,由于我们还想测试路由是否正常工作,因此我们希望路由能够正常工作。
例如,我们使用Router::scope
在route.php中构建路线
/**
* testscope routes
*/
Router::scope(
'/testscope',
function (RouteBuilder $routeBuilder) {
$controller = 'foobar';
RouterHelper::buildApiRoutes(
$routeBuilder,
new Route('/foo', $controller, 'foo'),
new Route('/bar', $controller, 'bar'),
);
}
);
将创建路由/ testscope / foo和/ testscope / bar
RouterHelper :: buildApiRoutes包含以下代码:
$apiHost = Configure::readOrFail('App.ApiHost');
foreach ($routes as $route) {
$routeBuilder
->connect(
$route->getPath(),
['controller' => $route->getController(), 'action' => $route->getAction()],
self::buildOptionsForRoute($route)
)
->setHost($apiHost);
}
关于如何确保config / routes.php中的路由得到实际使用的任何建议吗?
编辑:屏幕截图中缺少路线错误 Missing route error