如何使用Slick和Play在测试中应用手动演变!2.4

Sim*_*mon 11 scala playframework playframework-evolutions slick-3.0

我想在每个测试文件的开头手动运行我的evolution脚本.我正在玩Play!2.4和Slick 3.

根据文档,走的路似乎是:

Evolutions.applyEvolutions(database)
Run Code Online (Sandbox Code Playgroud)

但我无法获得我的数据库实例.在导入文档 play.api.db.Databases以获取数据库实例但是如果我尝试导入它,我收到此错误:object Databases is not a member of package play.api.db

如何获取我的数据库实例才能运行evolution脚本?

编辑:如评论中所述,这里是给出错误的完整源代码:

import models._
import org.scalatest.concurrent.ScalaFutures._
import org.scalatest.time.{Seconds, Span}
import org.scalatestplus.play._
import play.api.db.evolutions.Evolutions
import play.api.db.Databases

class TestAddressModel extends PlaySpec with OneAppPerSuite {
   lazy val appBuilder = new GuiceApplicationBuilder()
   lazy val injector = appBuilder.injector()
   lazy val dbConfProvider = injector.instanceOf[DatabaseConfigProvider]

  def beforeAll() = {
    //val database: Database = ???
    //Evolutions.applyEvolutions(database)
  }

  "test" must { 
     "test" in { } 
  } 
}
Run Code Online (Sandbox Code Playgroud)

Sim*_*mon 11

我终于找到了这个解决方案 我注入了Guice:

lazy val appBuilder = new GuiceApplicationBuilder()

lazy val injector = appBuilder.injector()

lazy val databaseApi = injector.instanceOf[DBApi] //here is the important line
Run Code Online (Sandbox Code Playgroud)

(你必须导入play.api.db.DBApi.)

在我的测试中,我只是执行以下操作(实际上我使用其他数据库进行测试):

override def beforeAll() = {
  Evolutions.applyEvolutions(databaseApi.database("default"))
}

override def afterAll() = {
  Evolutions.cleanupEvolutions(databaseApi.database("default"))
}
Run Code Online (Sandbox Code Playgroud)