Play Framework a partire dalla versione 2.3.x effettua il caricamento delle configurazioni presenti nel file conf/application.conf che al momento però non consente configurazioni diverse a seconda dell’ambiente (Sviluppo, Produzione, Test).
Questa configurazione è particolarmente scomoda se si vogliono effettuare i test direttamente da Activator in quanto questi test vengono eseguiti sullo stesso database utilizzato in ambiente di sviluppo, mentre vorremmo che fosse possibile testare su database diversi a seconda dell’ambiente.
Fortunatamente Typesafe Config e SBT forniscono tutto quello che ci serve per configurare il nostro ambiente in modo pulito.
La soluzione che voglio proporvi è la seguente
Per prima cosa dobbiamo creare un file di configurazione, ad esempio conf/application.test.conf, per la modalità di test. Questo file erediterà tutte le configurazioni presenti nel file conf/application.conf tramite l’istruzione include. Inoltre sovrascriverà mediante override i valori di configurazione che sono diversi e specifici per l’ambiente di test.
I database che possiamo utilizzare nell’ambiente di test sono postgresql con la seguente configurazione:
include "application.conf"
# Overrite db.default settings
db.default.driver="org.postgresql.Driver"
db.default.url="jdbc:postgresql://localhost/project_name_test"
db.default.user="username"
db.default.password="password"
In alternativa è possibile utilizzare un database H2 con la seguente configurazione:
include "application.conf"
# Overrite db.default settings
db.default.driver = org.h2.Driver
db.default.url = "jdbc:h2:mem:play"
db.default.username = "username"
db.default.password = "password"
Infine è necessario configurare SBT in modo che istruisca Play per caricare il file conf/application.test.conf quando è in esecuzione la modalità di test aggiungendo la seguente riga a build.st:
// Test Database settings javaOptions in Test += "-Dconfig.file=conf/application.test.conf" // Test libraries Database libraryDependencies += "com.h2database" % "h2" % "1.4.197" // Testing libraries for dealing with CompletionStage... libraryDependencies += "org.assertj" % "assertj-core" % "3.11.1" % Test libraryDependencies += "org.awaitility" % "awaitility" % "3.1.3" % Test // Make verbose tests testOptions in Test := Seq(Tests.Argument(TestFrameworks.JUnit, "-a", "-v"))
Ora non vi resta che effettuare un test lanciando il comandosbt test