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

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

Answers


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


Need Your Help

Supporting multiple parameters with nested properties in Meteor and Iron Router

javascript html meteor routing iron-router

Using Meteor and Iron Router, I've created dynamic page paths that use multiple parameters. However, if I attempt to access nested/child properties in my path, the route breaks. These posts were he...

Can a standard accessory view be in a different position within a UITableViewCell?

ios objective-c iphone uitableview accessoryview

I want my accessory to be in a slightly different place than normal. Is it possible?