Jouer 2.0 FakeApplication le programme d'installation avec configuration de test

J'ai un specs2 test qui utilise un FakeApplication et embarque une base de données mongodb.

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
    }
}

La FakeApplication utilise l'application par défaut.conf configuration dans le répertoire conf et autres paramètres de configuration pour le test des bases de données qui sont créées pour chaque test.

C'était de trouver jusqu'à ce que nous avons configuré un mongodb replicat ensemble. Maintenant l'application.conf contient la configuration pour ce replicat ensemble

mongodb.default.replicaset {
host1.host = "localhost"
host1.port = 27017
host2.host = "localhost"
host2.port = 27018
host3.host = "localhost"
host3.port = 27019
}

Comme le FakeApplication utilise la configuration par défaut, les tests échouent parce que les hôtes du jeu de réplication ne peut pas être trouvé. Je veux avoir une configuration différente pour mes tests, essentiellement de la suppression de la mongodb.par défaut.replicaset entrée. Si mongodb.par défaut.replicaset agissait d'une simple Carte[String, String] qui serait facile que je pourrais juste ajouter à la additonalConfiguration mais quand j'essaie de faire qu'il ne parvient pas parce que la valeur attendue de type n'est pas une Chaîne mais un Objet. J'ai aussi essayé de lui donner un essai séparé.fichier conf à la FakeApplication via le paramètre 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
    }
}

Qui ne fonctionne pas, soit qu'il n'a pas de charger un fichier de configuration.

J'apprécierais toute aide. Merci.

Chris

OriginalL'auteur cmacher | 2012-09-03