【问题标题】:Serializing Multipart Form requests for testing on Play 2.1序列化多部分表单请求以在 Play 2.1 上进行测试
【发布时间】:2013-02-07 10:06:51
【问题描述】:

我正在使用 play2.1 为使用路由功能的多部分表单的后控制器编写测试。

route(
  FakeRequest(POST,
    postControllerRoute().url,
    FakeHeaders(Seq(HeaderNames.CONTENT_TYPE -> Seq("multipart/form-data"))),
    body = body
  ).withAuthToken.withAdmin(adminId))

我发现要使这段代码正常工作,我需要定义这种类型的 Writeable [MultipartFormData[TemporaryFile]],因为我的主体变量是 MultipartFormData[TemporaryFile] 类型。我不确定如何序列化多部分请求,或者这是否是正确的方法。有什么建议吗?

已编辑

答案:跳过路由器直接使用控制器,就像文档中一样:http://www.playframework.com/documentation/2.1.0/ScalaFunctionalTest

【问题讨论】:

    标签: scala playframework-2.0 multipartform-data


    【解决方案1】:
    • 您有两个选择,将MultiPartFormData 序列化(据我所知)非常棘手。这篇文章可能会有所帮助:https://groups.google.com/forum/?fromgroups=#!topic/play-framework/MPtQlX-cWMQ
    • 您可以跳过route 方法。如果你想在你的控制器中测试Action,你可以简单地绕过路由。请参阅文档中的Testing your Controllers。如果您不通过路由器,则无需提供Writable。很少需要通过路由器,它基本上让您首先将其写入字节(使用Writer),然后(使用正文解析器)将其转换回 Play 可以理解的内容。

    【讨论】:

    • 嗯,是的,但我想测试多部分表单。我的控制器对 MultipartFormData 使用 body 解析器
    • 对不起,昨天我把FormUrlEncoded读成了MultipartFormData
    • 应该已经很明显了...我不需要测试路由器来测试控制器。感谢您朝正确的方向轻推。 :)
    【解决方案2】:

    如果你不想跳过路由,你需要一个 Writeable[AnyContentAsMultipartFormData],它将 MultipartFormData[TemporaryFile] 变成 Array[Byte]。

    这里有一个 Writeable[AnyContentAsMultipartFormData]:http://tech.fongmun.com/post/125479939452/test-multipartformdata-in-play

    【讨论】:

      猜你喜欢
      • 2018-01-06
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      相关资源
      最近更新 更多