2014-02-13 61 views
2

鉴于控制器这个动作:controller.modelAndView是集成测试空

def listBlockedMembers() { 
    def blocked = UserBlock.findAllByUser(springSecurityService.currentUser) 

    render(view:'listBlockedMembers', model:[blocked:blocked]) 
} 

在我的集成测试的模型和视图正常工作:

def blocked = controller.modelAndView.model['blocked'] 
assertEquals 2, blocked.size() 

,但如果我通过从模型这样的动作:

def listBlockedMembers() { 
    def blocked = UserBlock.findAllByUser(springSecurityService.currentUser) 
    [blocked:blocked] 
} 

我得到一个空指针异常访问controller.modelAndView(空指针在modelAndView属性本身)

我的集成测试扩展了GroovyTestCase。虽然第一个动作起作用,但第二个动作较少,我想知道为什么会出现空指针异常。在开发中,gsp为这两个操作呈现相同的内容。

回答

0

这事实上为这个Grails bug,并且它与正在处理的两个返回类型不同的事:

这里有正在讨论2个场景。一种是控制器中的方法返回Map的场景,另一种是控制器中的方法不返回Map的场景。对于该方法不返回Map的情况,为了讨论这个讨论,我们讨论了调用render方法的方法。

因此,看起来像返回地图时,最好将其视为常规方法(并处理返回的值),而不是调用controller.modelAndView。例如:

Map response = controller.listBlockedMembers() 
assert response.blocked