FakeApplication 不包含正文
Posted
技术标签:
【中文标题】FakeApplication 不包含正文【英文标题】:FakeApplication does not contain the body 【发布时间】:2016-11-24 15:10:04 【问题描述】:我有一个用 Scala 编写的控制器,它使用身份验证特征。该特征有一个 isAuthenticated 方法,如下所示:
def isAuthenticated(f: => AccountDTO => Request[AnyContent] => Result) =
Security.Authenticated(username, onUnauthorized) user =>
Action.async
request =>
Future.successful(f(user)(request))
在控制器中,我的方法使用 trait 方法在执行实际工作之前检查用户是否经过身份验证:
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是存在的,并且是我设置的。当 Postman 向应用程序发出请求时,“body”与发送的值一起存在。
【问题讨论】:
【参考方案1】:解决方案(或解决方法)是使用 call() 而不是 apply():
val result = call(filesController.createFileMetadata(), goodRequest)
现在一切都按预期进行。
【讨论】:
以上是关于FakeApplication 不包含正文的主要内容,如果未能解决你的问题,请参考以下文章
您的应用似乎包含用于注册 Apple 推送通知服务的 API,但应用签名的权利不包括
如何使用 MFMailComposeViewController 在电子邮件正文中添加图像
怎样使word页码中的总页数不包括封面和目录(文章正文中包含很多节)