2016-11-25 74 views
0

我有一個受認證特徵保護的控制器。這個特質看起來像這樣:FakeRequest向下轉換爲RequestHeader

def isAuthenticated(f: => AccountDTO => Request[AnyContent] => Result) = 
    Security.Authenticated(username, onUnauthorized) { user => 
     Action.async { 
     request => { 
      Future.successful(f(user)(request)) 
     } 
     } 
    } 

當做一個正常的請求時,一切正常,但是當做單元測試時我遇到問題。 我創建以下假冒要求:

val goodRequest = FakeRequest("POST", "/platform/api/v1/files") 
.withBody(Json.toJson(ScalaMockingUtil.fileValidMetadataJson)) 
     .withHeaders((HeaderNames.AUTHORIZATION, "4322tertf2643t34t34")) 

接下來,我讓我的控制器對象,並通過應用FakeRequest調用方法:

val result: Iteratee[Array[Byte], Result] = filesController.createFileMetadata()(goodRequest) 

,我現在面臨的問題是,沿線某處FakeReuqest被下載到RequestHeader。問題似乎是這裏描述的問題:Unable to test controller using Action.async其中Action有兩個應用方法而不是一個。然而,我似乎無法強制我需要的那個。

任何幫助表示讚賞。

回答

0

解決方案(或解決方法)是使用()調用,而不是適用():

val result = call(filesController.createFileMetadata(), goodRequest) 

現在一切按預期工作。