(Play 2.4.2, Play Slick 1.0.0) How do I apply database Evolutions to a Slick managed database within a test?
Asked Answered
R

1

4

I would like to write database integration tests against a Play Slick managed database and apply and unapply Evolutions using the helper methods described in the Play documentation namely, Evolutions.applyEvolutions(database) and Evolutions.cleanupEvolutions(database). However these require a play.api.db.Database instance which is not possible to get hold of from what I can see. The jdbc library conflicts with play-slick so how do I get the database instance from slick? I use the following to get a slick database def for running slick queries:

val dbConfig = DatabaseConfigProvider.get[JdbcProfile]("my-test-db")(FakeApplication())  
import dbConfig.driver.api._
val db = dbConfig.db

Thanks,

Leanne

Renferd answered 7/8, 2015 at 18:13 Comment(0)
F
1

Here is how I dow it with Guice:

I inject with Guice:

lazy val appBuilder = new GuiceApplicationBuilder()

lazy val injector = appBuilder.injector()

lazy val databaseApi = injector.instanceOf[DBApi] //here is the important line

(You have to import play.api.db.DBApi.)

And in my tests, I simply do the following (actually I use an other database for my tests):

override def beforeAll() = {
  Evolutions.applyEvolutions(databaseApi.database("default"))
}

override def afterAll() = {
  Evolutions.cleanupEvolutions(databaseApi.database("default"))
}

(I'm using Scalatest but it the same thing with an other testing framework.)

Fraternize answered 28/10, 2015 at 18:53 Comment(1)
Worked perfectly with play 2.5.10, play-slick 2.0.2.Veld

© 2022 - 2024 — McMap. All rights reserved.