Я пытаюсь настроить поддельный сервер с Play2.7 и средой, предложенной https://developer.lightbend.com/guides/play-rest-api/, просто повторяя json из запроса POST.Несмотря на то, что я мог делать запросы GET и POST, возвращающие зашитые значения, я не могу получить прямой доступ к запросу, чтобы вернуть или обработать его.ПРИМЕЧАНИЕ: это было выполнимо с версиями <2.6, но теперь Action устарела, поэтому мне интересно, как правильно решить эту проблему в Play> = 2.6
Я прочитал следующие howимитировать внешние вызовы WS API в Scala Play framework и Как выполнить модульное тестирование серверов в Play 2.6 теперь, когда синглтон Action устарел , которые фактически выполняют почти все, что я пытаюсь сделать, но, похоже, янужно что-то другое для доступа к запросу.В предыдущей версии Play я мог сделать что-то вроде следующего:
case POST(p"/route") => Action { request => Ok(request.body.asJson.getOrElse(JsObject.empty)) }
Но кажется, что вызывать действие таким образом невозможно, так как я получил «позорный»
object Action in package mvc is deprecated: Inject an ActionBuilder (e.g. DefaultActionBuilder) or extend BaseController/AbstractController/InjectedController
ошибка.
мой действующий рабочий код
object FakeServer {
def withServerForStep1[T](codeBlock: WSClient => T): T =
Server.withRouterFromComponents() { cs =>
{
case POST(p"/route") =>
cs.defaultActionBuilder {
Results.Ok(Json.arr(Json.obj("full_name" -> "octocat/Hello-World")))
}
}
} { implicit port =>
WsTestClient.withClient(codeBlock)
}
}
, а единица измерения спецификации выглядит примерно так:
"The step 1" should {
"Just call the fakeservice" in {
setupContext()
FakeServer.withServerForStep1 ( {
ws =>
val request = ws.url("/route")
val data = Json.obj(
"key1" -> "value1",
"key2" -> "value2"
)
val response = request.post(data).futureValue
response.status mustBe 200
response.body mustBe Json.toJson(data)
})
}
}
Я хотел бы написать FakeServer таким образом, чтобыСпецификация успешно проверит, что возвращаемое тело равно оригинальному отправленному json.В настоящее время он явно терпит неудачу с
"[{"full_name":"octocat/Hello-World"}]" was not equal to {"key1":"value1","key2":"value2"}