私はplay_2.9.1-2.0.3でアプリケーションを構築し、 specs2_2.9.1-1.7.1(playにバンドルされています)でテストしています。次のようなアクションがあります。
def createPoll() = Action { request =>
request.body.asJson.map {jsonBod =>
Poll.fromJsonValue(jsonBod).fold(
thrown => CommonResponses.invalidCreatePollRequest(this),
poll => (CommonResponses.createdPoll(poll, this))
)}.getOrElse(CommonResponses.expectingJson(this))
}
これは、curlからメッセージを送信すると期待どおりに機能しますが、specs2テストで次の例外が発生します。
ClassCastException: java.lang.String cannot be cast to play.api.mvc.AnyContent(PollController.scala:16)
ここで、16行目は次のとおりです。
def createPoll() = Action { request =>
テストの関連部分は次のとおりです。
routeAndCall(
FakeRequest(
PUT, controllers.routes.PollController.createPoll().url,
FakeHeaders(),
"{\"userId\":\"%s\",\"title\":\"%s\"}".format(userId, title)
).withHeaders(("Content-type", "application/json"))
)
createPoll
defを次のように変更した場合:def createPoll() = Action(parse.tolerantText) {
次に、specs2テストから機能させることができます。
誰かが私が間違っていることを知っていますか?理想的には、parse.jsonボディパーサーを使用したいのですが、テストのためにカールするだけでなく、スペックを使用できるようにしたいのです。ありがとう