在運行斯波克控制器測試:問題與斯波克和Grails 2.0.1測試時控制器
進口grails.plugin.spock * 進口grails.test.mixin *
@Mock(MusicItem)。 類MusicItemControllerSpec延伸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次spock測試... 3 of 6 |失敗:使用正確的參數創建元素(myvibe.fondation.MusicItemControllerSpec) | java.lang.IllegalStateException:找不到WebApplicationContext:沒有ContextLoaderListener註冊? at myvibe.fondation.MusicItemController.save(MusicItemController.groovy:29) at myvibe.fondation.MusicItemControllerSpec.Creating element with correct parameters(MusicItemControllerSpec.groovy:39) |運行6個斯波克測試... 6
4當我從save()方法刪除此行:
flash.message = message(code: 'default.created.message', args: [message(code: 'musicItem.label', default: 'MusicItem'), musicItemInstance.id])
比所有做工精細。我錯過了什麼?
是IN。整合或單元測試的測試規範呢? ControllerSpec用於單元測試,並且在2.0.x中不需要afaik。在集成中我擴展了IntegrationSpec – sbglasius 2012-04-06 05:49:12
它在單元規格中。 – robert 2012-04-06 18:49:17