Тестирование RoutingMiddleware с CakePHP 3.7 - PullRequest
0 голосов
/ 05 февраля 2019

Недавно мы пытались заставить интеграционные тесты работать с нашим приложением CakePHP 3.7.Однако у нас возникла проблема с получением маршрутов, которые будут найдены во время теста.

Поскольку маршрутизация добавляется как Middleware, класс Application загружает ее в Application::middleware().Все наши плагины загружаются в Application::bootstrap() и Application::bootstrapCli().

Когда мы сбрасываем Router :: routs () непосредственно перед вызовом сообщения $ this-> get или $ this->, мы видим, что всемаршруты присутствуют, однако, как только $ this-> get завершено, мы выгружаем код ответа с $this->_request->getStatusCode(), мы получаем 404 и $this->_getBodyAsString() результаты в HTML-файле с сообщением Ошибка: отсутствует маршрут.

Читая кулинарную книгу о Интеграционное тестирование кажется, что вам нужно использовать $this->useHttpServer(true) в случае пользовательского класса Application, однако мы используем стандартное приложение \ Application

.наш метод работы - либо использовать маршруты. php, найденные в скелетном приложении CakePHP (из-за отказа), либо обойти все маршруты вместе, используя $this->get(['controller' => 'class', 'action' => 'method'])

Однако, так как мы также хотим проверитьесли маршруты работают, мы предпочли бы, чтобы маршрутизация работала должным образом.

Мы строим наши маршруты в rout.php, используя Router::scope например

/**
 * 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 / rout.phpдействительно используются?

Редактировать: снимок экрана с ошибкой отсутствующего маршрута Ошибка отсутствующего маршрута

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...