如何将演变应用于DatabaseConfigProvider中的数据库测试

时间:2019-04-23 14:57:01

标签: playframework guice slick play-slick

我要测试dao(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...

  }

}

但是它给了我错误:

  

instanceOf[Database]的向导配置错误:

     

1)没有绑定play.api.db.Database的实现。而   定位play.api.db.Database

那么我如何访问数据库并对其应用进化呢?

我发现我需要使用EvolutionComponents,但不知道如何使用

1 个答案:

答案 0 :(得分:0)

我的错误是,我添加了以下依赖项:

libraryDependencies ++= Seq(evolutions, jdbc)

但正确的是:

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

没有特殊的测试步骤,只需在配置中即可:

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