J'ai un test spécifique2 qui utilise une base de données FAKOPLIGNATION et une base de données embarquée de MongoDB.
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 } }
5 Réponses :
Utilisation d'un chemin Qu'est-ce que je suggérerais Dans votre cas consiste à spécifier un puis Peut-être qu'il serait peut-être logique d'avoir le "mode cible unique" de la manière de la connexion à MongoDB dans votre code> ne fonctionnera pas ici, car il s'agit du chemin de la FAKEAPPLICATION que vous utilisez (vous pourriez avoir un chemin différent dans certains cas).
test.conf code> lors de l'exécution de la lecture pour le mode test, comme par exemple p>
test.conf code> sera ramassé. Vous pouvez également également inclure votre application
application.conf code> et écrasez la configuration MongOB pour utiliser un réplicaset uniquement dans une configuration de production. P> P>
Le problème est de savoir comment spécifier le fichier test.conf lors de l'exécution d'un test d'interrogation à l'aide de FAKEAPPICATION DE LA PLAY. Dans mon test d'intégration, je ne peux pas appeler Ce que j'ai réussi à faire est celui-ci: p> jouer -dconfig.file = conf / test.conf code>.
Nous avons eu un problème similaire chargement de configurations supplémentaires pour nos tests d'intégration. Nous avons trouvé des cartes peuplées manuellement pour être fastidieux, nous avons donc utilisé l'approche suivante:
private Configuration additionalConfigurations; @Before public void initialize(){ Config additionalConfig = ConfigFactory.parseFile(new File("conf/integration.conf")); additionalConfigurations = new Configuration(additionalConfig); } @Test public void testPropertiesGetLoaded() throws Exception{ running(testServer(3333, fakeApplication(additionalConfigurations.asMap())), HTMLUNIT, new Callback<TestBrowser>(){ public void invoke(TestBrowser browser){ String specificProperty = Play.application().configuration().getString("specific.property"); System.out.println(specificProperty); } }); }
C'est comme ça que je l'ai fait en jeu 2.3.x
Définissez mon application Définir les paramètres globaux de l'application comme dans la classe de test, définissez un test global. La configuration de test est ajoutée à la fin pour remplacer ou ajouter à la configuration d'application globale: p>
Créez la fausse application avec le GlobalSettings code> dans une classe
appglobal code> dans un emballage (pas le package racine) p>
FakeApplication(withGlobal = Some(TestGlobal))
Object global étend appglobal code> qui est utilisé votre application. p> li>
object TestGlobal extends AppGlobal {
override def onLoadConfig(config: Configuration,
path: File,
classloader: ClassLoader,
mode: Mode): Configuration = {
config ++ configuration ++
Configuration.load(path, mode = Mode.Dev,
Map("config.file" -> "conf/test.conf"))
}
}
Testglobal ci-dessus CODE> P>
package configs
class AppGlobal extends GlobalSettings {
// Your application global settings
???
}
Dans mon cas, j'ai simplement créé une classe de base que tous mes tests s'étendent.
Juste avant de créer la FAKEAPPLICATION I Définissez la propriété système Application.conf: contient des configurations spécifiques NON-ENV P> test.conf: inclut l'application.conf et définit les configurations pour exécuter les tests d'unité P> < p> env_local.conf: inclut l'application.conf et définit les configurations pour exécuter l'application localement p> env_prod.conf: comme env_local.conf mais pour la production, etc. p> dans mon projet , pour la commodité, j'ai citée un script local.sh
qui exécute simplement activateur -dconfig.resource = env_local.conf p>