Написание тестового примера для загрузки файлов в Play 2.1 и Scala

Я нашел следующий вопрос / ответ:

Тестирование MultipartFormData в Play 2.0 FakeRequest

Но, похоже, в Play 2.1 все изменилось. Я попытался адаптировать пример так:

"Application" should {

"Upload Photo" in {
  running(FakeApplication()) {
    val data = new MultipartFormData(Map(), List(
        FilePart("qqfile", "message", Some("Content-Type: multipart/form-data"), 
            TemporaryFile(getClass().getResource("/test/photos/DSC03024.JPG").getFile()))
        ), List())
    val Some(result) = routeAndCall(FakeRequest(POST, "/admin/photo/upload", FakeHeaders(), data)) 
    status(result) must equalTo(CREATED)
    headers(result) must contain(LOCATION)
    contentType(result) must beSome("application/json")  

Однако всякий раз, когда я пытаюсь выполнить запрос, я получаю исключение нулевого указателя:

[error] ! Upload Photo
[error]     NullPointerException: null (PhotoManagementSpec.scala:25)
[error] test.PhotoManagementSpec$anonfunТестирование MultipartFormData в Play 2.0 FakeRequest$anonfun$applyОднако всякий раз, когда я пытаюсь выполнить запрос, я получаю исключение нулевого указателя:$anonfun$apply$4.apply(PhotoManagementSpec.scala:28)
[error] test.PhotoManagementSpec$anonfunТестирование MultipartFormData в Play 2.0 FakeRequest$anonfun$applyОднако всякий раз, когда я пытаюсь выполнить запрос, я получаю исключение нулевого указателя:$anonfun$apply$4.apply(PhotoManagementSpec.scala:25)
[error] play.api.test.Helpers$.running(Helpers.scala:40)
[error] test.PhotoManagementSpec$anonfunТестирование MultipartFormData в Play 2.0 FakeRequest$anonfun$apply$3.apply(PhotoManagementSpec.scala:25)
[error] test.PhotoManagementSpec$anonfunТестирование MultipartFormData в Play 2.0 FakeRequest$anonfun$apply$3.apply(PhotoManagementSpec.scala:25)

Если я пытаюсь заменить устаревший routeAndCall только маршрутом (и удаляю Option вокруг результата), я получаю ошибку компиляции, утверждающую, что он не может записать экземпляр MultipartFormData [TemporaryFile] в ответ HTTP.

Как правильно разработать этот тест в Play 2.1 с помощью Scala?

редактироватьПопытка изменить код, чтобы проверить только контроллер:

"Application" should {

"Upload Photo" in {

   val data = new MultipartFormData(Map(), List(
   FilePart("qqfile", "message", Some("Content-Type: multipart/form-data"), 
    TemporaryFile(getClass().getResource("/test/photos/DSC03024.JPG").getFile()))
), List())

   val result = controllers.Photo.upload()(FakeRequest(POST, "/admin/photo/upload",FakeHeaders(),data))


   status(result) must equalTo(OK)
   contentType(result) must beSome("text/html")
   charset(result) must beSome("utf-8")
   contentAsString(result) must contain("Hello Bob")
  }

Но теперь я получаю ошибку типа во всех условиях теста вокруг результатов, например:

[error]  found   : play.api.libs.iteratee.Iteratee[Array[Byte],play.api.mvc.Result]
[error]  required: play.api.mvc.Result

Я не понимаю, почему я получаю Interator для байтовых массивов, сопоставленных с Results. Может ли это быть как-то связано с тем, как я использую собственный анализатор тела? Определение моего контроллера выглядит так:

def upload = Action(CustomParsers.multipartFormDataAsBytes) { request =>

  request.body.file("qqfile").map { upload =>

Используя парсер формы из этого поста:Вытягивание файлов из MultipartFormData в память в Play2 / Scala

Ответы на вопрос(6)

Ваш ответ на вопрос