Тестирование EssentialFilter в фреймворке lagom / play - PullRequest
0 голосов
/ 17 октября 2019

Я попытался протестировать свой код, как показано в документации к игре, используя GuiceOneAppPerSuite

class LoggingEssentialActionSpec extends PlaySpec with GuiceOneAppPerSuite {
  implicit lazy val materializer: Materializer = app.materializer
  implicit lazy val executionContext: ExecutionContext = materializer.executionContext
  implicit lazy val Action = app.injector.instanceOf(classOf[DefaultActionBuilder])

  "Logging action" should {
    "log" in {
      val filter = new LoggingFilter()
      val action: EssentialAction = Action { request =>
        val value = (request.body.asJson.get \ "field").as[String]
        Ok(value)
      }

      val request = FakeRequest("POST", "/myresource").withJsonBody(Json.parse("""{ "field": "value" }"""))

      val result = call(filter.apply(action), request)

      status(result) mustEqual OK
      contentAsString(result) mustEqual "value"
    }
  }
}

Проблема в том, что подсказка Injector не работает, потому что она не может подключить мои контроллеры. Контроллеры НЕ украшены @Inject, потому что я использую «macwire» для подключения моих зависимостей в ApplicationLoader.

К сожалению, тест требует DefaultActionBuilder, и я не могу найти способ, как его получить,Есть ли способ, которым я могу создать такой конструктор действий без хитрости, пытаясь создать экземпляр моих контроллеров? или я могу переписать код теста как-нибудь еще, чтобы я мог обойти это?

...