2
我实现授权我的戏框架(2.3.5版本)的应用程序为每official security documentation:担保特质造成SPEC2单元测试编译错误
trait Secured {
def username(request: RequestHeader) = request.session.get(Security.username)
def onUnauthorized(request: RequestHeader) = Results.Redirect(routes.Login.index)
def withAuth(f: => String => Request[AnyContent] => Result) = {
Security.Authenticated(username, onUnauthorized) { user =>
Action(request => f(user)(request))
}
}
}
然而,当我装修我的控制器动作与withAuth
功能如下所示:
def export = withAuth { username => implicit request =>
val csv = csv()
Ok(csv)
.as("text/csv")
.withHeaders(
CONTENT_DISPOSITION -> ("attachment; filename=export.csv"),
CONTENT_LENGTH -> csv.length.toString
)
}
我得到的编译错误在我的控制器specs2单元测试:
"export data as CSV" in {
val controller = new controllers.DataController
val result = controller.export().apply(FakeRequest())
headers(result) must havePair("Content-Disposition" -> ("attachment; filename=export.csv"))
}
到headers
测试辅助函数调用失败,出现以下编译器错误消息:
类型不匹配;发现:play.api.libs.iteratee.Iteratee [数组[字节],play.api.mvc.Result]要求:scala.concurrent.Future [play.api.mvc.Result]
我做有问题?我尝试了其他Stackoverflow用户的一些remediessuggested,但它们似乎都依赖于设置正文类型,但我的操作没有正文类型。
看起来好像withAuth
的呼叫模糊了某些被包裹的动作类型,所以也许有更安全的方式表达Secured
特征?