2016-03-29 2 views
0

У меня есть спрей конечной точки, который принимает MultipartFormData так:спрей MultipartFormData Spec

trait ApiRouting extends Routing with ResultService with FormDataUnmarshallers { 
    override def route: Route = 
    path("test") { 
    post { 
     entity(as[MultipartFormData]) { formData => 
     complete(handleRequest(formData)) 
     } 
    } 
    } 
} 

Это прекрасно работает, когда я отправляю через почтальона. Тем не менее, я пытаюсь написать спецификацию, которая проверяет эту конечную точку и получить эту ошибку:

java.lang.ClassCastException: spray.http.HttpEntity$Empty$ cannot be cast to spray.http.HttpEntity$NonEmpty

Это то, что у меня есть:

trait Context extends Scope with ApiRouting {} 

    "check post request" should { 

    "return response data for post request" in new Context { 

     val file = new File("test") 
     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("/test", mfd) ~> route ~> check { 
     status must_== StatusCodes.OK 
     contentType must_== `multipart/form-data`  
     } 
    } 
    } 

Любые идеи о том, как проверить спрея многокомпонентные данные формы?

ответ

2

Это происходит потому, что вы передаете файл нулевой длины в HttpData. Попробуйте обратиться к реальному файлу.

Также вы можете передать File непосредственно в BodyPart. Это будет выглядеть так:

Post(Uri("/test"), 
     MultipartFormData(
     Seq(BodyPart(file, "file", ContentType(MediaTypes.`application/xml`))) 
    ) 
    ) 
+0

@maloney Я только что проверил ваш код с соответствующим файлом - он отлично работает для меня. Не могли бы вы загрузить минимальный рабочий пример в github. –

Смежные вопросы