【问题标题】:How to test actions that expect an uploaded file in Play Framework (version 2.0, using Scala)?如何在 Play Framework(2.0 版,使用 Scala)中测试需要上传文件的操作?
【发布时间】:2012-11-12 22:28:18
【问题描述】:

文档中的Writing functional tests 部分非常简陋,并且缺少关于完全提交模拟表单值的详细信息。我以某种方式(不记得如何/在哪里)确定您可以通过将Map 传递给FakeRequest 来提交基本表单值(模拟 POST 请求),如下所示:

val Some(result) = routeAndCall(FakeRequest(POST, "/path/to/test", FakeHeaders(),
                                Map("postedVariable" -> Seq("and a value"))))

但是,这似乎不允许“上传”文件的情况。

【问题讨论】:

标签: scala playframework playframework-2.0 functional-testing


【解决方案1】:

我们的文件上传测试如下所示:

val tempFile = TemporaryFile(new java.io.File("/tmp/the.file"))
val part = FilePart[TemporaryFile](key = "image", filename = "the.file", contentType = Some("image/jpeg"), ref = tempFile)
val formData = MultipartFormData(dataParts = Map(), files = Seq(part), badParts = Seq(), missingFileParts = Seq())
val result = routeAndCall(FakeRequest(POST, "/path/to/test", FakeHeaders(), formData))

其中"image" 是您希望在其中找到文件内容的 HTML 表单元素的名称。

如果您使用BodyParsers.maxLength 来限制上传大小,可以将formData 替换为Right(formData)

【讨论】:

  • 这就是我所需要的!除了一个问题:在构建FakeRequest 时,我必须删除formData 周围的Right 包装器;因此,最后一行应该是:val result = routeAndCall(FakeRequest(POST, "/path/to/test", FakeHeaders(), formData))
  • 我还要注意FilePartkey 参数应该是您的HTML 表单的文件输入使用的名称。
  • 抱歉,Right 包装器是因为我们使用 BodyParsers.maxLength 来限制上传的大小。我在构建示例时忘记将其删除。
猜你喜欢
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 2012-12-04
相关资源
最近更新 更多