Я использую Play 2.5.10, Play-скользкий 2.0.2, и мой активатор сгенерированных проект поставляется с scalatest и такой код:Play Slick: Как придать DbConfigProvider в тестах
class TestSpec extends PlaySpec with OneAppPerSuite {...}
мне удалось проверять маршруты/действия; теперь я бы тест DAO методы на более низком уровне. Я искал в Интернете и SO для решения, и не мог найти то, что все еще актуально. DAO подпись, как это:
class TestDAO @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) extends HasDatabaseConfigProvider[JdbcProfile]
так что мне нужно, чтобы передать ему dbConfigProvider
вещь. По некоторым причинам я не могу вводить поставщика в тестах, как мы делаем в контроллерах (без ошибок, тесты просто не будет работать):
class TestSpec @Inject()(dbConfigProvider: DatabaseConfigProvider) extends PlaySpec with OneAppPerSuite {...}
Play-Slick docs говорят, что мы можем в качестве альтернативы использовать глобальный поиск
val dbConfig = DatabaseConfigProvider.get[JdbcProfile](Play.current)
, но он не будет работать напрямую, потому что
Там не запущенное приложение
и ссылку на примере проекта делать это:
class TestDAOSpec extends Specification {
"TestDAO" should {
"work as expected" in new WithApplicationLoader { // implicit 'app'
val app2dao = Application.instanceCache[TestDAO].apply(app)
, но я никогда не мог найти WithApplicationLoader
. Вместо этого, кажется WithApplication
:
class TestDAOSpec extends Specification {
"TestDAO" should {
"work as expected" in new WithApplication() { // implicit 'app'
val app2dao = Application.instanceCache[TestDAO].apply(app)
, но затем я получаю
Несоответствие типа: ожидали play.api.Application, получил: play.Application.
На данный момент я потерял надежду.
Как проверить DAO?
N.B. Мне не нужно переключать базы данных для тестирования (я обрабатываю это через config), я просто хочу получить доступ к базе данных по умолчанию в тестах.
Вам просто нужно приложение в объеме, так смешайте в 'OneAppPerSuite' или' OneAppPerTest'. См. [Здесь] (https://github.com/sake92/PlayGuiceExample/blob/master/test/dao/PersonDAOImplSpec.scala#L17). –
Я делаю 'с OneAppPerSuite', но я получаю это. Одно из решений, которое я нашел, это «import play.api.Play.current» в версии «WithApplication()», то он работает, но я получаю предупреждение об устаревании. – JulienD
Он работал с этим примером, спасибо большое. Я переусердствовал «PlaySpec», чтобы включить весь этот таинственный беспорядок. Я совершенно отвратился от того, как это так невероятно сложно. Переопределите неявное приложение, которое происходит из ниоткуда, 'GuiceApplicationBuilder', повторите conf, который у вас уже есть в вашей конфигурации, без видимых причин,' instanceCache', whaaat ?? И если я могу скопировать и вставить, что после sooo много часов пробовал все остальное, почему это еще не в рамках ??? – JulienD