Начальная загрузка Grails на интеграционных тестах - PullRequest
4 голосов
/ 10 сентября 2010

Я пытаюсь вставить некоторые тестовые данные в свою базу данных, для чего работает класс с именем BootStrapTest.

В моем файле BootStrap.groovy он называется так

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

        }

Однако, когда я запускаю свои интеграционные тесты, этот код не выполняется.Я читал, что интеграционные тесты должны запускаться, поэтому я в замешательстве.

Я видел некоторые инвазивные решения, такие как , модифицирующие скрипт TestApp.groovy , но я мог бы предположить, что тамэто путь через конф, чтобы достичь этого.Также прочитайте этот ТАК вопрос и этот вопрос , но не совсем понял.

Может быть, я что-то неправильно понимаю, у меня многопроблемы с тестированием Grails.Если это принесет что-то на стол, я использую Intelli JIdea в качестве IDE.

Будем благодарны за любые мысли.

Заранее спасибо

Ответы [ 4 ]

9 голосов
/ 03 ноября 2010

Весь код начальной загрузки должен вызываться из замыкания инициализации.Таким образом, эта версия должна работать:

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
    }

}

В качестве альтернативы, вы можете иметь отдельный файл начальной загрузки для вставки тестовых данных вместо вызова BootStrapTest.init ().Любой класс в папке grails-app / conf с именем * BootStrap.groovy (например, TestBootStrap.groovy) запускается на этапе начальной загрузки.Смотри http://www.grails.org/Bootstrap+Classes

2 голосов
/ 17 января 2012

Из документации 2.0 :

Для начальной загрузки среды

Часто желательно запускать код при запуске приложения наоснова окружающей среды.Для этого вы можете использовать поддержку файла grails-app / conf / BootStrap.groovy для выполнения в среде:

def init = { ServletContext ctx ->
    environments {
        production {
            ctx.setAttribute("env", "prod")
        }
        development {
            ctx.setAttribute("env", "dev")
        }
    }
    ctx.setAttribute("foo", "bar")
}
0 голосов
/ 11 сентября 2010

у меня работает на 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 = {
    }
}

этот интеграционный тест проходит:

@Test
void testBootStrapDataGotLoaded() {
    assertNotNull Person.findByName('made in bootstrap')
}
0 голосов
/ 10 сентября 2010

в BootStrap.groovy вы можете попробовать что-то вроде этого

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