У меня есть 2 конечных точки: GET /users/me
и GET /users/:id
. Я хочу перенаправить первое на второе, передав идентификатор текущего пользователя. Таким образом, я сделал этот метод:Воспроизведение рамки переадресации на другой метод возвращает 303 в тесте
def getCurrentUser = SecuredAction { implicit request =>
request.identity.id.map { currentUserId =>
logger.info(s"Returning current user $currentUserId's profile")
Redirect(routes.UserController.getUserById(currentUserId))
}.getOrElse(InternalServerError)
}
Это прекрасно работает, и я не получаю 303 (я думаю) с почтальоном. Тем не менее, следующий тест терпит неудачу, так как статус равен 303:
val result = userController.getCurrentUser()(authenticatedRequest)
status(result) mustBe OK
Является ли это некоторой причудой для тестовой платформы? Я думал, что синтаксис, который я использовал, был для молчаливого внутреннего перенаправления. Я действительно не хочу возвращать 303 клиенту.
Как я могу проверить это, и метод, который я написал, выполняет бесшумную внутреннюю переадресацию?
Я не хочу возвращать 303, потому что мне не нужен дополнительный кругооборот. Кроме того, предлагаемая вами замена не работает, потому что 'getUserById' также является контроллером действий async, и я получаю сообщение об ошибке' Выражение типа Object не соответствует ожидаемому типу Result'. Я ищу способ одного метода контроллера, прозрачно пересылающий на другой метод контроллера, не возвращая 303 между ними. Вы знаете, возможно ли это? – jbrown
Нет, это невозможно без использования системы rooting ans, поэтому без возврата 303. То, что я хотел вам рассказать, это использовать непосредственно методы, используемые UserController.getUserById (Если нет методов, из которых один из них используется, он используется UserController.getUserById и getCurrentUser). – Simon
OK спасибо ...... – jbrown