2016-12-15 9 views
0

У меня есть 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 клиенту.

Как я могу проверить это, и метод, который я написал, выполняет бесшумную внутреннюю переадресацию?

ответ

1

Ваш результат никогда не будет нормально (это эквивалентно статусу http 200), поскольку два возвращаемых статуса - 303 (перенаправление) и 500 (InternalServerError).

Почему вы не хотите возвращать статус переадресации?

Если вы хотите, чтобы вернуть статус OK, вы могли бы заменить эту строку:

Redirect(routes.UserController.getUserById(currentUserId)) 

методом getUserById.

+0

Я не хочу возвращать 303, потому что мне не нужен дополнительный кругооборот. Кроме того, предлагаемая вами замена не работает, потому что 'getUserById' также является контроллером действий async, и я получаю сообщение об ошибке' Выражение типа Object не соответствует ожидаемому типу Result'. Я ищу способ одного метода контроллера, прозрачно пересылающий на другой метод контроллера, не возвращая 303 между ними. Вы знаете, возможно ли это? – jbrown

+0

Нет, это невозможно без использования системы rooting ans, поэтому без возврата 303. То, что я хотел вам рассказать, это использовать непосредственно методы, используемые UserController.getUserById (Если нет методов, из которых один из них используется, он используется UserController.getUserById и getCurrentUser). – Simon

+0

OK спасибо ...... – jbrown