我尝试使用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
,但我没有找到一种方法来获得它。有没有一种方法可以创建这样的动作生成器,而无需尝试实例化我的控制器?还是可以以其他方式重写测试代码,以便可以解决此问题?