Недавно мы пытались заставить интеграционные тесты работать с нашим приложением 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действительно используются?
Редактировать: снимок экрана с ошибкой отсутствующего маршрута Ошибка отсутствующего маршрута