6

BootStrapTest というクラスが作業を行うために、いくつかのテスト データをデータベースに挿入しようとしています。

私のBootStrap.groovyファイルでは、このように呼び出されます

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

        }

ただし、統合テストを実行すると、このコードは実行されません。統合テストはブートストラップする必要があると読んだことがあるので、かなり混乱しています。

TestApp.groovy scriptを変更するなど、侵襲的な解決策をいくつか見ましたが、これを達成するには conf を介した道があると思います。this SO questionthis one as wellも読んでくださいが、よくわかりませんでした。

多分私は何かを誤解しています.grailsのテストで多くの問題を抱えています. それがテーブルに何かをもたらす場合は、Intelli JIdea を IDE として使用しています。

どんな考えでも大歓迎です。

前もって感謝します

4

4 に答える 4

11

すべてのブートストラップ コードは、Init クロージャーから呼び出す必要があります。したがって、このバージョンは動作するはずです:

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() を呼び出すのではなく、テスト データを挿入するための別のブートストラップ ファイルを用意することもできます。*BootStrap.groovy という名前の grails-app/conf フォルダー内のクラス (例: TestBootStrap.groovy) は、ブートストラップ フェーズで実行されます。http://www.grails.org/Bootstrap+Classesを参照してください

于 2010-11-03T08:47:02.957 に答える
2

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")
}
于 2012-01-16T23:28:21.053 に答える
0

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"
}
于 2010-09-10T16:18:45.293 に答える
0

これは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')
}
于 2010-09-11T03:49:14.827 に答える