I have evolution problems when running tests in the game infrastructure using
- playframework v2.6.6 for scala
- play-slick v3.0.2
- play-slick-evolutions v3.0.2
The test is as follows:
class TestFooController extends PlaySpec with GuiceOneServerPerSuite {
"foo endpoint should store some data" in {
val wsClient = app.injector.instanceOf[WSClient]
val url = s"http://localhost:$port/foo"
val requestData = Json.obj("foo" -> "bar")
val response = await(wsClient.url(url).post(requestData))
response.status mustBe OK
}
}
The database configuration is as follows:
slick.dbs.default.driver="slick.driver.H2Driver$"
slick.dbs.default.db.driver="org.h2.Driver"
slick.dbs.default.db.url="jdbc:h2:mem:play"
As a result, there is an evolution of the script that creates the table foos
, and this script works fine in dev mode.
When starting the test, the following error is issued:
play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[JdbcSQLException: Table "foos" not found;
The table could not be found foos
, so I assume that the database changes were not applied.
Then I changed the database configuration to postgresql, which is used in dev mode.
slick.dbs.default.driver = "slick.driver.PostgresDriver$"
slick.dbs.default.db.driver = "org.postgresql.Driver"
slick.dbs.default.db.url = "jdbc:postgresql://localhost:5432/foo-test"
slick.dbs.default.db.user = "user"
slick.dbs.default.db.password = "password"
, , .
, . .
. H2Db , postgresql , .
application.test.conf
play.evolutions.autoApply=true
play.evolutions.autoApplyDowns=true
play.evolutions.db.default.autoApply=true
play.evolutions.db.default.autoApplyDowns=true
.
:
def withManagedDatabase[T](block: Database => T): Unit = {
val dbapi = app.injector.instanceOf[DBApi]
val database = dbapi.database("default")
Evolutions.applyEvolutions(database)
block(database)
Evolutions.cleanupEvolutions(database)
}
:
"foo endpoint should store some data" in withManagedDatabase { _ =>
...
}
H2 , , foos
. postgresql
play.api.db.evolutions.InconsistentDatabase: Database 'default' is in an inconsistent state![An evolution has not been applied properly. Please check the problem and resolve it manually before marking it as resolved.]
, , . ?