Spray:使用 Specs2 测试文件上传

Spray: Testing File Uploads with 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 请求,您必须在其中指定 post 文件和分隔表单项的边界。 我希望更接近 CURL 的工作原理。

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

谢谢

我有同样的问题或疑问。

尝试通过以下方式添加边界:

Post("/upload", HttpEntity(MediaTypes.multipart/form-data.withBoundary("-somerandomboundary"), """{"filename":"a.wav"} """)) ~>

不过,你可能会遇到我遇到的下一个颠簸,这是一个错误,说它需要一个开始边界。

因此,我通过将我发现的各种帖子中的一些代码拼凑在一起——主要是与使用 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!"
  }
}