问题与斯波克和Grails 2.0.1测试时控制器

问题与斯波克和Grails 2.0.1测试时控制器

问题描述:

在运行斯波克控制器测试:问题与斯波克和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]) 

比所有做工精细。我错过了什么?

+0

是IN。整合或单元测试的测试规范呢? ControllerSpec用于单元测试,并且在2.0.x中不需要afaik。在集成中我扩展了IntegrationSpec – sbglasius 2012-04-06 05:49:12

+0

它在单元规格中。 – robert 2012-04-06 18:49:17

由于消息标记而失败。下面应该工作

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

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

+0

是的。那是做的。谢谢。 – robert 2012-04-08 18:30:31

+0

酷...请不要忘记接受答案,如果这个工程..谢谢 – Saurabh 2012-04-08 18:31:57