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!"
}
}
我有一个使用 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!"
}
}