1

Spock コントローラ テストの実行中:

grails.plugin.spock.* をインポート grails.test.mixin.* をインポート

@Mock(MusicItem) class MusicItemControllerSpec extends ControllerSpec {

def "Creating element with correct parameters"() {
    setup:
    controller.params.artist = "John Lennon"
    controller.params.name = "Imagine"
    controller.params.location = new URL ("http://localhost")

    when:
    controller.save()

    then:
    redirectArgs.action == "show"
    controller.flash.message != null
    MusicItem.count() == 1
}

}

テストされる部分は次のとおりです。

def save() {
    def musicItemInstance = new MusicItem(params)
    if (!musicItemInstance.save(flush: true)) {
        render(view: "create", model: [musicItemInstance: musicItemInstance])
        return
    }

    flash.message = message(code: 'default.created.message', args: [message(code: 'musicItem.label', default: 'MusicItem'), musicItemInstance.id])
    redirect(action: "show", id: musicItemInstance.id)
}

それはコントローラーの一部です。私はこの例外を受けています:

| | 6 つのスポック テストを実行しています... 3/6 | 失敗: 正しいパラメーターで要素を作成しています (myvibe.fondation.MusicItemControllerSpec) | java.lang.IllegalStateException: WebApplicationContext が見つかりません: ContextLoaderListener が登録されていませんか? myvibe.fondation.MusicItemController.save(MusicItemController.groovy:29) で myvibe.fondation.MusicItemControllerSpec.Creating element with right parameters(MusicItemControllerSpec.groovy:39) | 6 つのスポック テストを実行しています... 4/6

この行を save() メソッドから削除すると:

        flash.message = message(code: 'default.created.message', args: [message(code: 'musicItem.label', default: 'MusicItem'), musicItemInstance.id])

すべて正常に動作します。私は何が欠けていますか?

4

1 に答える 1

3

メッセージタグが原因で失敗しています。以下はうまくいくはずです

setup:
controller.metaClass.message = {args -> "mockMessage"}

http://greybeardedgeek.net/2011/05/13/testing-grails-controllers-with-spock/

于 2012-04-06T20:47:53.200 に答える