В своем проекте я использую 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 считывает свойства db из файла конфигурации, расположенного по адресу /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 прочитает указанную конфигурацию для запуска интеграционных тестов.
Как лучше всего этого добиться?