使用CakePHP 3.7测试RoutingMiddleware

时间:2019-02-05 17:09:30

标签: php unit-testing cakephp phpunit

我们最近一直在尝试进行集成测试,以与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

0 个答案:

没有答案