Lagom - Как я могу использовать обработчик событий в тесте интеграции службы?

Я создаю службу аутентификации в 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]
  }

person idoshamun    schedule 02.01.2018    source источник
comment
Обычно я бы использовал шаблон withClient для таких типов тестов, а не шаблон beforeAll. Не уверен, что это что-то решит, но это просто стиль.   -  person erip    schedule 02.01.2018
comment
На самом деле, это может что-то решить... Если authService равно var, его начальное значение будет null, поэтому возможны побочные эффекты работы инициализации службы.   -  person erip    schedule 02.01.2018
comment
Что это за функция withClient, я с ней не знаком?   -  person idoshamun    schedule 02.01.2018
comment
Что-то вроде этого.   -  person erip    schedule 02.01.2018
comment
Большой! Я сделаю это в ближайшее время. Спасибо   -  person idoshamun    schedule 02.01.2018
comment
К сожалению не помогло   -  person idoshamun    schedule 11.01.2018


Ответы (1)


Чтобы решить эту проблему, мне пришлось использовать WordSpec вместо AsyncWordSpec, контекст выполнения по умолчанию каким-то образом мешает Lagom, и, кроме того, мне пришлось добавить блок eventually, чтобы проверить, обновлено ли состояние, потому что обработка события происходит не сразу и занимает около 30 секунд.

person idoshamun    schedule 16.01.2018