在lagom / play框架中测试EssentialFilter

时间:2019-10-17 15:34:06

标签: scala playframework lagom

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

0 个答案:

没有答案