播放框架重定向到其他方法 returns 303 在测试中

Play framework redirecting to other method returns 303 in test

我有 2 个端点:GET /users/meGET /users/:id。我想将第一个重定向到第二个,传递当前用户的 ID。所以我做了这个方法:

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

这是测试框架的一些怪癖吗?我认为我使用的语法是用于静默内部重定向。我实际上不想 return 向客户发送 303。

我如何测试这个以及我编写的方法是否执行静默内部重定向?

您的结果永远不会正常(相当于 http 状态 200),因为您 returning 的两个状态是 303(重定向)和 500(InternalServerError)。

您为什么不想 return 重定向状态?

如果你想return一个OK状态,你可以替换这行:

Redirect(routes.UserController.getUserById(currentUserId))

通过方法getUserById