Ho un test specs2 che utilizza FakeApplication e un database integrato di mongodb.Play 2.0 Installazione di FakeApplication con configurazione di test
def inMemoryMongoDatabase(name: String = "default"): Map[String, String] = {
val dbname: String = "play-test-" + scala.util.Random.nextInt
Map(
("mongodb." + name + ".db" -> dbname),
("mongodb." + name + ".port" -> EmbeddedMongoTestPort.toString))
}
override def around[T <% Result](t: => T) = {
running(FakeApplication(additionalConfiguration = inMemoryMongoDatabase(), additionalPlugins = Seq("se.radley.plugin.salat.SalatPlugin"))) {
t // execute t inside a http session
}
}
Il FakeApplication utilizza la configurazione predefinita application.conf nella directory conf e la configurazione aggiuntiva per i database di test che vengono creati per ogni test.
Questo funzionava trovare fino a quando non abbiamo impostato un set di repliche mongodb. Ora l'application.conf contiene la configurazione per questo Replicat set
mongodb.default.replicaset {
host1.host = "localhost"
host1.port = 27017
host2.host = "localhost"
host2.port = 27018
host3.host = "localhost"
host3.port = 27019
}
Come il FakeApplication utilizza la configurazione predefinita i test falliscono perché i padroni di casa del replicaset non può essere trovato. Voglio avere una configurazione diversa per i miei test, in pratica rimuovo la voce mongodb.default.replicaset. Se mongodb.default.replicaset fosse una semplice Map [String, String] sarebbe facile dato che potrei semplicemente aggiungerla ad additonalConfiguration ma quando provo a farlo fallisce perché il tipo di valore atteso non è una String ma un Object. Ho anche provato a fornire un file test.conf separato a FakeApplication tramite il parametro path.
override def around[T <% Result](t: => T) = {
running(FakeApplication(path = new java.io.File("conf/test.conf"), additionalConfiguration = inMemoryMongoDatabase(), additionalPlugins = Seq("se.radley.plugin.salat.SalatPlugin"))) {
t // execute t inside a http session
}
}
Che non ha funzionato in quanto non ha caricato alcuna configurazione.
Apprezzerei molto qualsiasi aiuto. Grazie.
Chris