2016-12-15 65 views
0

我有2個端點:GET /users/meGET /users/:id。我想將第一個重定向到第二個,傳遞當前用戶的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(我認爲)與郵遞員。

val result = userController.getCurrentUser()(authenticatedRequest) 
status(result) mustBe OK 

這是測試框架的一些怪癖,但因爲狀態是303以下測試失敗?我認爲我使用的語法是無聲的內部重定向。我實際上並不想把303交給客戶。

我該如何測試,並且我寫的方法執行無聲的內部重定向?

回答

1

因爲你要返回的兩個狀態是303(重定向)和500(InternalServerError),所以你的結果永遠不會好(這相當於http狀態200)。

爲什麼你不想返回重定向狀態?通過該方法getUserById

Redirect(routes.UserController.getUserById(currentUserId)) 

如果你想返回正常工作狀態,你可以替換該行。

+0

我不想返回303,因爲我不想額外往返。此外,您所建議的替換不起作用,因爲'getUserById'也是一個異步操作控制器,並且出現'Object的表達式不符合預期的類型結果'的錯誤。我正在尋找一種方法,一種控制器方法透明地轉發到另一個控制器方法,而無需返回303。你知道這是可能的嗎? – jbrown

+0

不,如果沒有使用rooting系統,不可能返回303。我想告訴你的是直接使用UserController.getUserById使用的方法(如果沒有使用的方法,請在服務中提取一個方法並使其它由UserController.getUserById和getCurrentUser使用)。 – Simon

+0

好的,謝謝...... – jbrown

相關問題