【问题标题】:Play scala integration spec - Injecting dependencies through Guice播放 scala 集成规范 - 通过 Guice 注入依赖项
【发布时间】: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


    【解决方案1】:

    你必须制作一个特征并在测试中混合它,然后它就会起作用。

    trait WithDatabaseConfig {
        lazy val (driver, db) = {
            val dbConfig = DatabaseConfigProvider.get[JdbcProfile](Play.current)
            (dbConfig.driver, dbConfig.db)
        }
    }
    

    我不知道为什么,我是 Scala 初学者。可能必须对未/正在运行的应用程序或 Guice 做一些事情。在https://github.com/playframework/play-slick/blob/1.1.x/samples/json/test/DBSpec.scala的示例文件夹中找到它

    【讨论】:

      猜你喜欢
      • 2015-12-06
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多