Я пытаюсь проверить рамочные игры 2.5.10 контроллера, который использует пользовательский bodyparser и JSON валидатор:Как протестировать контроллер платформы воспроизведения, который использует настраиваемый элемент bodyparser?
class MessagingController {
def validateJson[A : Reads] = parse.json.validate(
_.validate[A].asEither.left.map(e => BadRequest(JsError.toJson(e)))
)
def createMessageThread() = Action(validateJson[InboundMessageThread]) { request =>
Ok("OK") }
}
Когда я бег простого тест, на это я получаю сообщение об ошибке:
For request 'POST /api/v1/messageThreads' [Invalid Json: No content to map due to
end-of-input at [Source: [email protected]; line: 1, column: 0]]
тест:
val fakeRequest = FakeRequest()
.withHeaders(HeaderNames.CONTENT_TYPE -> "application/json")
.withBody(Json.parse(
s"""
|{
| "participants": [
| {"id": $currentUserId, "isAdmin": false}
| ],
| "isGroupThread": false
|}
""".stripMargin))
val result = messagingController.createMessageThread()(fakeRequest).run()
status(result) mustBe OK
Если изменить действие контроллера только Action
, а затем проверять достоверность JSON в теле контроля Это работает. Я не хочу этого делать, потому что многие мои контроллеры REST должны разбирать JSON, а использование validateJson[T]
уменьшает шаблон. Код также работает, если я отправляю одну и ту же полезную нагрузку с помощью curl.
Как проверить этот контроллер?
Это дает '415 не равный 403'. Если я добавлю вызов 'withHeaders' обратно, я получаю' 400 не равным 403', как раньше ... – jbrown