【问题标题】:Lagom - How can I use event processor in a service integration test?Lagom - 如何在服务集成测试中使用事件处理器?
【发布时间】:2018-01-16 15:05:56
【问题描述】:

我正在 Lagom (scala) 中构建一个身份验证服务,它由一个设备实体和一个事件处理器组成。该服务使用 JDBC 插件而不是默认的 Cassandra。在编写集成测试时,我发现事件处理器并没有在事件上被调用,只是为了初始化。我不知道如何接近......

abstract class AuthApplication(context: LagomApplicationContext) extends LagomApplication(context)
  with JdbcPersistenceComponents
  with AhcWSComponents
  with HikariCPComponents {
  override lazy val lagomServer = serverFor[AuthService](wire[AuthServiceImpl])
  lazy val jsonSerializerRegistry = AuthSerializerRegistry
  lazy val jwtAuthenticator: PkiAuthenticator = new JwtAuthenticator(config.getConfig("jwt"))
  lazy val tokenRepository = wire[TokenRepository]

  persistentEntityRegistry.register(wire[DeviceEntity])
  readSide.register(wire[DeviceEventProcessor])

  wire[TokenScheduler]
}

集成测试初始化​​:

override def beforeAll: Unit = {
    server = ServiceTest.startServer(ServiceTest.defaultSetup.withCassandra(true)) { ctx =>
      new ServiceTestApplication(ctx)
    }

    authService = server.serviceClient.implement[AuthService]
  }

【问题讨论】:

  • 通常我会在这些类型的测试中使用withClient 模式,而不是beforeAll。不确定这是否能解决任何问题,但这只是一个风格点。
  • 其实可以解决一些问题...如果authServicevar,那么它的初始值就是null,所以服务的初始化方式可能会有副作用工作。
  • withClient这个功能是什么,我不熟悉?
  • 类似this.
  • 太棒了!我很快就会试一试。谢谢

标签: scala integration-testing lagom


【解决方案1】:

为了解决这个问题,我不得不使用WordSpec 而不是AsyncWordSpec,默认执行上下文不知何故与Lagom 混淆了,此外我必须添加一个eventually 块来检查状态是否因为事件处理而更新不是立即的,大约需要 30 秒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多