喷涂:使用Specs2测试文件上载

时间:2015-05-20 14:53:22

标签: spray specs2

我有一个使用Spray构建的API来处理文件上传。 我正在尝试为上传功能编写一个测试,但我没有快速到达任何地方。我不确定如何构建测试来模拟文件上传。 我有以下测试...

"Valid POST Requests should return success" in {
  Post("/upload", HttpEntity(MediaTypes.`multipart/form-data`, """{"filename":"a.wav"}""")) ~> 
  sealRoute(uploadRoute) ~> check {
    response.status should be equalTo OK
    responseAs[String] === "..."
  }
}

运行此命令会产生以下错误消息...

Content-Type with a multipart media type must have a non-empty 'boundary' parameter' is not equal to ...

这似乎是一个类似于如何使用apache bench模拟POST / Upload请求的错误消息,您必须指定一个帖子文件和分隔表单项的边界。 我希望能有更接近CURL的工作方式。

无论哪种方式,任何人都可以指出我正确的方向,如何正确地构建这样的测试?

由于

3 个答案:

答案 0 :(得分:2)

所以我设法通过拼凑我发现的各种帖子中的一些代码来实现这一点 - 主要是关于使用spray-client进行文件上传的帖子。 可能不是最漂亮但对我有用! :)

"Valid POST Requests should return success" in {
  val file = new File("a.wav")
  val httpEntity = HttpEntity(MediaTypes.`multipart/form-data`, HttpData(file)).asInstanceOf[HttpEntity.NonEmpty]
  val formFile = FormFile("file", httpEntity)
  val mfd = MultipartFormData(Seq(BodyPart(formFile, "file")))
  Post("/upload", mfd) ~> sealRoute(uploadRoute) ~> check {
    response.status should be equalTo OK
    body.contentType.toString() === "application/json; charset=UTF-8"
    responseAs[String] === "Success!"
  }
}

答案 1 :(得分:1)

就像我一样,找到了一个答案,帮助我重新思考我的事情并稍微改变一下: Understanding Spray: Demistification

答案 2 :(得分:0)

我有同样的问题或问题。

尝试添加边界:

发布(" / upload",HttpEntity(MediaTypes。multipart/form-data。withBoundary(" -somerandomboundary"),""" {" filename":" a.wav"}"""))〜>

虽然,你可能面对我面临的下一个碰撞,这是一个错误,说它需要一个起始边界。