私は現在、機能の一部として MultipartFormData 送信を受け入れる Play Framework 2.2.x アプリケーションの Specs2 テストをいくつか書いている最中です。
次のフォームを使用して、テキストと JSON 本文を含む他のテストを正常に作成しました。
"respond to POST JSON with description field present" in {
running(FakeApplication()) {
val response = route(FakeRequest(POST, "/submission.json").withJsonBody(toJson(Map("content" -> toJson("test-content"), "description" -> toJson("test-description"))))).get
status(response) must equalTo(OK)
contentType(response) must beSome.which(_ == "application/json")
contentAsString(response) must contain(""""description":"test-description"""")
contentAsString(response) must contain(""""content":"test-content"""")
}
}
ただし、.withMultipartFormData メソッドを使用すると、次のエラーが発生します。
Cannot write an instance of play.api.mvc.AnyContentAsMultipartFormData to HTTP response. Try to define a Writeable[play.api.mvc.AnyContentAsMultipartFormData]
val response = route(FakeRequest(PUT,"/submission.json/1/files").withMultipartFormDataBody(data)).get
^
私がデバッグしようとしている MultipartFormData テストは、次の形式です。
"respond to file PUT form with details not specififed" in {
running(FakeApplication()) {
val basePath:String = Play.application.path.getCanonicalPath();
val data:MultipartFormData[TemporaryFile] = MultipartFormData(Map[String,Seq[String]](),
List(
FilePart("file_upload","",Some("Content-Type: multipart/form-data"),TemporaryFile(new java.io.File(basePath + "/test-data/testUpload.jpg")))
),
List(),
List())
val response = route(FakeRequest(PUT,"/submission.json/1/files").withMultipartFormDataBody(data)).get
status(response) must equalTo(CREATED)
}
}
関連するバージョンの FakeRequest クラスの Play フレームワークのドキュメントを見ると、問題を追跡するのに役立つ情報があまりありません: play.api.test.FakeRequest
また、この問題に関する他のドキュメントに関しては、Play Framework の Web サイトと Google にはかなり欠けているようです。
MultipartFormData コードをテストするために、次の代替手段を試しました。
- Play 2.1 と Scala でのファイル アップロードのテスト ケースの作成
- Play 2.0 FakeRequest で MultipartFormData をテストする
- Java を使用して Play Framework 2.0 でファイル アップロードのマルチパート フォーム データ リクエストをテストするにはどうすればよいですか? (最初に Scala コードに変換します)。
ただし、これらのアプローチのいずれでも成功していません。