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
Vous devez vous connecter pour publier un commentaire.
Nous avons eu un problème similaire chargement des configurations supplémentaires pour nos tests d'intégration. Nous avons trouvé le remplissage de cartes manuellement pour être fastidieuse, alors nous avons utilisé l'approche suivante:
Je ne sais pas si il y a une bonne méthode sur la Scala côté des choses, nous faisons tout notre code en java.
OriginalL'auteur tdb
Le problème est de savoir comment spécifier le test.conf fichier lors de l'exécution d'un test de l'insertion à l'aide d'une pièce de théâtre FakeAppication. Dans mon essai d'intégration, je ne peux pas appeler
play -Dconfig.file=conf/test.conf
.Ce que j'ai réussi à faire c'est ceci:
OriginalL'auteur cmacher
C'est la façon dont je l'ai fait dans le Jeu 2.3.x
Définir ma demande
GlobalSettings
dans une classeAppGlobal
dans un paquet (pas le package racine)Définir l'application paramètres globaux comme
object Global extends AppGlobal
qui est utilisé votre application.Dans la classe de test, de définir un test global. La configuration de test est ajouté à la fin pour remplacer ou ajouter à l'ensemble de la configuration de l'application:
Créer l'application de faux avec ce qui précède
TestGlobal
OriginalL'auteur k.c. sham
Dans mon cas, j'ai simplement créé une classe de base que tous mes tests étendre.
Juste avant la création de la FakeApplication je définir le système de la propriété config.ressources qui définit la configuration de l'application.
Puis j'ai structuré mes configurations comme suit :
application.conf : contient aucun-env configurations spécifiques
test.conf : comprend l'application.conf et définit les configurations pour exécuter les tests unitaires
env_local.conf : comprend l'application.conf et définit les configurations pour exécuter l'application localement
env_prod.conf : comme env_local.conf mais pour la production, etc ...
Dans mon projet, pour des raisons de commodité, j'ai créé un script local.sh
qui fonctionne simplement activateur -Dconfig.ressource=env_local.conf
OriginalL'auteur berardino
À l'aide de
path
ne marchera pas ici, puisque c'est le chemin de la FakeApplication vous êtes en cours d'exécution (vous pourriez avoir un chemin différent dans certains cas).Ce que je vous suggère dans votre cas est de spécifier un
test.conf
lors de l'exécution de Jouer pour le mode test, comme par exemplePuis
test.conf
doit être ramassé. Vous pouvez également y inclure la normale de votreapplication.conf
et remplacer juste le mongo paramètres.Peut-être, il serait logique d'avoir la "cible unique mode" par défaut de la connexion à mongodb dans votre
application.conf
, et écraser l'mongob de configuration pour utiliser un jeu de réplication que dans une configuration de production.OriginalL'auteur Manuel Bernhardt