Voglio eseguire test unitari per un'app Play 2 Scala utilizzando la stessa impostazione del database utilizzata nella produzione: Liscio con Postgres. Quanto segue non riesce con "java.sql.SQLException: tentativo di ottenere una connessione da un pool che è già stato arrestato." al 2 ° test.Esegui 2.1 Test unitario con Slick e Postgres
package controllers
import org.specs2.mutable._
import play.api.db.DB
import play.api.Play.current
import play.api.test._
import play.api.test.Helpers._
import scala.slick.driver.PostgresDriver.simple._
class BogusTest extends Specification {
def postgresDatabase(name: String = "default",
options: Map[String, String] = Map.empty): Map[String, String] =
Map(
"db.test.driver" -> "org.postgresql.Driver",
"db.test.user" -> "postgres",
"db.test.password" -> "blah",
"db.test.url" -> "jdbc:postgresql://localhost/blah"
)
def fakeApp[T](block: => T): T =
running(FakeApplication(additionalConfiguration =
postgresDatabase("test") ++ Map("evolutionplugin" -> "disabled"))) {
def database = Database.forDataSource(DB.getDataSource("test"))
database.withSession { implicit s: Session => block }
}
"Fire 1" should {
"do something" in fakeApp {
success
}
}
"Fire 2" should {
"do something else" in fakeApp {
success
}
}
}
ho eseguito il test come questo:
$ play -Dconfig.file=`pwd`/conf/dev.conf "test-only controllers.BogusTest"
Due altri misteri:
1) Tutti i test eseguiti, anche se chiedo solo BogusTest per eseguire
2) application.conf viene sempre utilizzato, non def.conf e le informazioni sul driver provengono da application.conf, non dalle informazioni configurate nel codice.
Vedere http://stackoverflow.com/questions/15399161/how-do-i-specify-a-config-file-with-sbt-0-12-2-for-sbt-test per informazioni su come specificare un diverso file di configurazione con 'test'. –
Grazie, sembra che questo dovrebbe occuparsi del mistero n. 2. Riesci a far luce sul problema principale? –
Anche io sto incontrando lo stesso problema. Anche senza utilizzare il tratto Around di specs2, e semplicemente il wrapping all'interno di 'in {running (fakeApp) {Database.forDataSource (DB.getDataSource()) withSession {}}}' fornisce anche questa eccezione. – Meredith