Durante l'esecuzione del test del controller Spock:
import grails.plugin.spock. * import grails.test.mixin. *
@Mock (MusicItem) class MusicItemControllerSpec estende 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
}
}
Dove parte testata è:
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)
}
Questo fa parte del controller. Ricevo questa eccezione:
| Esecuzione di 6 test spock ... 3 di 6 | Errore: creazione dell'elemento con i parametri corretti (myvibe.fondation.MusicItemControllerSpec) | java.lang.IllegalStateException: No WebApplicationContext trovato: nessun ContextLoaderListener registrato? su myvibe.fondation.MusicItemController.save (MusicItemController.groovy: 29) at myvibe.fondation.MusicItemControllerSpec.Creating element con i parametri corretti (MusicItemControllerSpec.groovy: 39) | Esecuzione di 6 test spock ... 4 di 6
Quando rimuovo questa riga dal metodo save ():
flash.message = message(code: "default.created.message", args: [message(code: "musicItem.label", default: "MusicItem"), musicItemInstance.id])
Di tutto funziona bene. Cosa mi manca?
risposte:
3 per risposta № 1Non funziona a causa del tag del messaggio. Seguire dovrebbe funzionare
setup:
controller.metaClass.message = {args -> "mockMessage"}
http://greybeardedgeek.net/2011/05/13/testing-grails-controllers-with-spock/