我有一个使用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的工作方式。
无论哪种方式,任何人都可以指出我正确的方向,如何正确地构建这样的测试?
由于
答案 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"}"""))〜>
虽然,你可能面对我面临的下一个碰撞,这是一个错误,说它需要一个起始边界。