【问题标题】:Spray: Testing File Uploads with Specs2Spray:使用 Specs2 测试文件上传
【发布时间】:2015-05-20 14:53:22
【问题描述】:

我有一个使用 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 工作原理的东西。

无论哪种方式,谁能指出我如何正确构建这样一个测试的正确方向?

谢谢

【问题讨论】:

    标签: spray specs2


    【解决方案1】:

    所以我设法通过将我发现的各种帖子中的一些代码拼凑在一起来完成这项工作 - 主要是与使用 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!"
      }
    }
    

    【讨论】:

      【解决方案2】:

      我有同样的问题或疑问。

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

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

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

      【讨论】:

      • 嗨,我试过了,因为我以前看到过问题,但就像你说的那样,我遇到了另一个问题。无论如何,我实际上只是得到了这个工作(无论如何对我来说!)并将我的解决方案作为答案发布
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 2017-10-19
      • 2012-09-12
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多