FakeRequest下载到RequestHeader

时间:2016-11-25 16:23:50

标签: scala playframework playframework-2.4

我有一个受身份验证特性保护的控制器。特征看起来像这样:

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有两个apply方法而不是一个。但是,我似乎无法强迫我需要的那个。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

解决方案(或解决方法)是使用call()而不是apply():

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

现在一切正常。