我有一個用Scala編寫的控制器,它使用了一個身份驗證特徵。性狀有像下面的isAuthenticated方法:FakeApplication不包含正文
def isAuthenticated(f: => AccountDTO => Request[AnyContent] => Result) =
Security.Authenticated(username, onUnauthorized) { user =>
Action.async {
request => {
Future.successful(f(user)(request))
}
}
}
在控制器中,我的方法使用特徵的方法來檢查,如果用戶進行身份驗證或做實際工作不前:
def createFileMetadata() = isAuthenticated { user => implicit request =>
{
....
}
當做一個POST請求(來自Postman或UI)一切都按預期工作,但是當我嘗試進行單元測試時,我面臨嚴重的問題。
單元測試如下:
val goodRequest = FakeRequest(POST, url).withJsonBody([a JsObject]).withHeaders((HeaderNames.AUTHORIZATION, "someMockToken"))
現在,如果在我的控制器我使用request.body.asJson
我得到None
。此外,如果我有(HeaderNames.CONTENT_TYPE, "application/json")
,我會得到400(錯誤請求),甚至沒有輸入控制器方法。
我也嘗試使用withBody()
而不是withJsonBody()
,但結果相同。拼命地,我甚至嘗試使用Java實現RequestBuidler()
來構建請求,但結果完全相同。
再次,當應用程序運行時發出請求,工作,只是單元測試有問題。使用調試我看到了一些奇怪的東西,這可能是問題所在。如下圖所示,在執行單元測試時,請求中的「body」是空的,但rh $ 1中的body存在並且與我設置的一樣。當從郵遞員向申請人發出請求時,「身體」與發送的值一起存在。