9
votes

Play 2.0 FAKEApplication Configuration avec la configuration de test

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


0 commentaires

5 Réponses :


0
votes

Utilisation d'un chemin 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).

Qu'est-ce que je suggérerais Dans votre cas consiste à spécifier un test.conf lors de l'exécution de la lecture pour le mode test, comme par exemple xxx

puis test.conf sera ramassé. Vous pouvez également également inclure votre application application.conf normale. / code> et remplacer uniquement les paramètres de Mongo.

Peut-être qu'il serait peut-être logique d'avoir le "mode cible unique" de la manière de la connexion à MongoDB dans votre application.conf et écrasez la configuration MongOB pour utiliser un réplicaset uniquement dans une configuration de production.


0 commentaires

3
votes

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 jouer -dconfig.file = conf / test.conf .

Ce que j'ai réussi à faire est celui-ci: xxx


0 commentaires

10
votes

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


0 commentaires

2
votes

C'est comme ça que je l'ai fait en jeu 2.3.x

  1. Définissez mon application GlobalSettings code> dans une classe appglobal code> dans un emballage (pas le package racine) p>

    FakeApplication(withGlobal = Some(TestGlobal))
    
  2. Définir les paramètres globaux de l'application comme Object global étend appglobal code> qui est utilisé votre application. p> li>

  3. 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>

    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"))
        }
    }
    
  4. Créez la fausse application avec le Testglobal ci-dessus CODE> P>

    package configs
    
    class AppGlobal extends GlobalSettings {
      // Your application global settings
      ???
    }
    


0 commentaires

1
votes

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 config.Resource qui définit la configuration de l'application. Ensuite, j'ai structuré mes configurations comme suit:

Application.conf: contient des configurations spécifiques NON-ENV

test.conf: inclut l'application.conf et définit les configurations pour exécuter les tests d'unité < p> env_local.conf: inclut 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 la commodité, j'ai citée un script local.sh qui exécute simplement activateur -dconfig.resource = env_local.conf xxx


0 commentaires