Как применить эволюции для тестирования базы данных из DatabaseConfigProvider - PullRequest
0 голосов
/ 23 апреля 2019

Я хочу проверить дао (play 2.6.21, play-slick 3.0.3):

@Singleton
class MyDao @Inject()(@NamedDatabase("default") protected val dbConfigProvider: DatabaseConfigProvider)
                             (implicit val sc: ExecutionContext)
  extends HasDatabaseConfigProvider[JdbcProfile] {
  ...

}

Я размещаю конфигурацию базы данных для тестовой базы данных в ресурсах теста:

slick.dbs.default {
  profile = "slick.jdbc.PostgresProfile$"
  endpoint = "localhost:12345"
  schema = "my_test_schemma"

  db {
    driver = "org.postgresql.Driver"
    url = "jdbc:postgresql://"${slick.dbs.default.endpoint}"/"${slick.dbs.default.schema}""
  }
}

В тесте я хочу применить эволюцию:

class MyDaoSpec extends FlatSpec with GuiceFakeApplicationFactory {

  implicit lazy val app: Application = fakeApplication()

  "dao" should "something" in {

    val conf = app.injector.instanceOf[DatabaseConfigProvider]
    val db = app.injector.instanceOf[Database]
    Evolutions.applyEvolutions(db)

    val dao = app.injector.instanceOf[MyDao]
    //tests...

  }

}

Но это дает мне ошибку:

Ошибки конфигурации Guice для instanceOf[Database]:

1) Не реализована реализация для play.api.db.Database. в то время как поиск play.api.db.Database

Итак, как мне получить доступ к базе данных и применить к ней эволюцию?

Я обнаружил, что мне нужно использовать EvolutionComponents, но не понимаю, как его использовать

1 Ответ

0 голосов
/ 25 апреля 2019

Моя ошибка была в том, что я добавил следующие зависимости:

libraryDependencies ++= Seq(evolutions, jdbc)

Но верным было:

"com.typesafe.play" %% "play-slick-evolutions" % "3.0.3",

Специальных шагов для теста нет, простов конфиге:

play.evolutions.enabled = true
play.evolutions.autoApply = true
...