2010-09-10 6 views
4

J'essaie d'insérer des données de test dans ma base de données, pour laquelle une classe appelée BootStrapTest fait le travail.Grails bootstrap sur les tests d'intégration

Dans mon BootStrap.groovy déposer son appelé comme celui-ci

environments { 
      test { 
       println "Test environment" 
       println "Executing BootStrapTest" 
       new BootStrapTest().init() 
       println "Finished BootStrapTest" 
      } 

     } 

Cependant, quand je lance mes tests d'intégration, ce code ne marche pas exécuter. J'ai lu que les tests d'intégration devraient démarrer, donc je suis assez confus.

J'ai vu quelques solutions invasives, telles que modifying the TestApp.groovy script, mais j'imagine qu'il y a une route à travers conf pour y parvenir. Lire également this SO question et this one as well, mais n'a pas tout à fait compris. Peut-être que je ne comprends pas quelque chose, j'ai beaucoup de problèmes avec les tests de graal. Si cela apporte quelque chose à la table, j'utilise Intelli JIdea comme IDE.

Toutes les pensées seront appréciées.

Merci à l'avance

Répondre

0

à BootStrap.groovy vous pouvez essayer quelque chose comme ça

if (!grails.util.GrailsUtil.environment.contains('test')) { 
    log.info "In test env" 
    println "Test environment" 
    println "Executing BootStrapTest" 
    new BootStrapTest().init() 
    println "Finished BootStrapTest" 
} else { 
    log.info "not in test env" 
} 
+0

Je ne pense pas que la 'BootStrap.groovy' est en cours d'exécution du tout. – Tom

+0

Si vous faites quelque chose d'autre de façon incorrecte, le bootstrap doit être exécuté pendant le processus de test d'intégration –

0

cela fonctionne pour moi 1.3.4:

def init = { servletContext -> 
     println 'bootstrap' 
     switch (GrailsUtil.environment) { 
      case "test": 
      println 'test' 
      Person p=new Person(name:'made in bootstrap') 
      assert p.save(); 
      break 
      } 
    } 
    def destroy = { 
    } 
} 

ce test d'intégration passe:

@Test 
void testBootStrapDataGotLoaded() { 
    assertNotNull Person.findByName('made in bootstrap') 
} 
9

Tout le code d'amorçage doit être appelé à partir de la fermeture d'initialisation. Donc, cette version devrait fonctionner:

import grails.util.Environment 

class BootStrap { 
    def init = { servletContext -> 
     // init app 
     if (Environment.current == Environment.TEST) { 
      println "Test environment" 
      println "Executing BootStrapTest" 
      new BootStrapTest().init() 
      println "Finished BootStrapTest" 

     } 
    } 

    def destroy = { 
     // destroy app 
    } 

} 

Sinon, vous pouvez avoir un fichier d'amorçage séparé pour insérer des données de test, plutôt que d'appeler BootStrapTest.init(). Toutes les classes du dossier grails-app/conf, nommées * BootStrap.groovy (par exemple, TestBootStrap.groovy), sont exécutées dans la phase d'amorçage. Voir http://www.grails.org/Bootstrap+Classes

2

De l'2.0 documentation:

par Environnement Amorçage

il est souvent souhaitable d'exécuter du code lorsque votre application démarre sur une base par l'environnement. Pour ce faire, vous pouvez utiliser le soutien du Grails-app/conf/BootStrap.groovy pour l'exécution par-environnement:

def init = { ServletContext ctx -> 
    environments { 
     production { 
      ctx.setAttribute("env", "prod") 
     } 
     development { 
      ctx.setAttribute("env", "dev") 
     } 
    } 
    ctx.setAttribute("foo", "bar") 
} 
Questions connexes