2015-10-15 3 views
3

Я использую Scala, Play 2.4 и Slick 3 в своем проекте. У меня есть код DAO, и он отлично работает от конца до конца.Play scala integration spec - Инъекционные зависимости через Guice

@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.

Мой проект установки немного отличается от того, как у нас есть несколько сред, поэтому мы имеем файл structuers как:

/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 будет считывать указанный конфигурационный файл для запуска интеграционных тестов.

Каков наилучший способ достичь этого?

ответ

0

Вы должны сделать признак и смешать его в тесте, а затем он будет работать.

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