【发布时间】:2017-05-14 04:04:00
【问题描述】:
我正在开发使用 Play 2.5.10 和 Slick 3.1.1 的 this github project(可以通过运行 sbt test 重现该问题,但也可以运行 also be checked directly in travis CI)。我使用 Postgres 数据库配置 default 进行开发和生产。然后我使用名为test 的内存数据库中的H2 进行测试。 default 数据库在conf/application.conf 中配置,而test 数据库在conf/application.test.conf 中配置。
问题在于,为了进行测试,我使用名称 test 初始化数据库,但使用 GuiceApplicationBuilder 构建的应用程序仍在使用 default 之一。
这一行在我的build.sbt中取测试配置:
javaOptions in Test += "-Dconfig.file=conf/application.test.conf"
这是该文件的内容:
include "application.conf"
slick.dbs {
test {
driver="slick.driver.H2Driver$"
db.driver="org.h2.Driver"
db.url="jdbc:h2:mem:test;MODE=PostgreSQL"
db.username="sa"
db.password=""
}
}
我的DaoFunSpec 基类如下所示:
package dao
import org.scalatest.{BeforeAndAfterAll, FunSpec}
import org.scalatestplus.play.OneAppPerSuite
import play.api.Application
import play.api.db.evolutions.Evolutions
import play.api.db.DBApi
abstract class DaoFunSpec extends FunSpec with OneAppPerSuite with BeforeAndAfterAll {
lazy implicit val db = app.injector.instanceOf[DBApi].database("test")
override def beforeAll() {
Evolutions.applyEvolutions(db)
}
override def afterAll() {
Evolutions.cleanupEvolutions(db)
}
def userDao(implicit app: Application) = {
Application.instanceCache[UserDao].apply(app)
}
}
请注意 app.injector.instanceOf[DBApi].database("test") 行,但 Play 仍会尝试连接到 default 数据库。
【问题讨论】:
标签: scala playframework slick