【发布时间】:2016-01-13 12:56:21
【问题描述】:
我在我的项目中使用 Scala、Play 2.4 和 Slick 3。我有以下 DAO 代码,它从头到尾都可以正常工作。
@Singleton()
class CompaniesDAO @Inject() (protected val dbConfigProvider: DatabaseConfigProvider) extends CompaniesComponent
with HasDatabaseConfigProvider[JdbcProfile] {
import driver.api._
}
但是,由于 dbConfig 的原因,我无法使其在集成测试中按预期工作。我的集成测试如下:
class CompaniesDaoIntegrationSpec extends FunSpec with OneServerPerSuite {
def companiesDao(implicit app: Application) = {
val app2CompaniesDAO = Application.instanceCache[CompaniesDAO]
app2CompaniesDAO(app)
}
describe("create") {
it("should create ") {
companiesDao.create...
}
}
}
如果我没有将 db 属性放在 application.conf 中,则会出现以下错误:
[info] java.lang.RuntimeException: com.google.inject.ProvisionException: Unable to provision, see the following errors:
[info]
[info] 1) No implementation for play.api.db.slick.DatabaseConfigProvider was bound.
[info] while locating play.api.db.slick.DatabaseConfigProvider
[info] for parameter 0 at
根据上面的代码,Play 应用程序从位于/conf/application.conf 的配置文件中读取数据库属性。
我的项目设置与此有点不同,因为我们有多个环境,所以我们有如下文件结构:
/conf/local/application.conf
/conf/testing/application.conf
/conf/staging/application.conf
/conf/production/application.conf
当我们使用如下命令运行播放应用程序时:activator run -Dconfig.resource=/conf/local/application.conf,一切正常。
我想对集成规范做同样的事情,比如:activator test -Dconfig.resource=/conf/local/application.conf。
Play 将读取指定的配置以运行集成测试。
实现这一目标的最佳方法是什么?
【问题讨论】:
标签: scala playframework guice slick