Я попытался протестировать свой код, как показано в документации к игре, используя 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
, и я не могу найти способ, как его получить,Есть ли способ, которым я могу создать такой конструктор действий без хитрости, пытаясь создать экземпляр моих контроллеров? или я могу переписать код теста как-нибудь еще, чтобы я мог обойти это?