controller.modelAndView在集成测试中为null

时间:2014-02-13 04:25:55

标签: grails testing integration-testing

在控制器中给出此操作:

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为两个动作呈现相同的内容。

1 个答案:

答案 0 :(得分:0)

实际上这是一个Grails bug,它与处理两种不同的返回类型有关:

  

这里讨论了两种情况。一种情况是控制器中的方法返回Map,另一种情况是控制器中的方法不返回Map。对于方法不返回Map的情况,为了讨论起见,我们讨论的是调用render方法的方法。

因此,在返回地图时,将其视为常规方法(并处理返回的值)可能比调用controller.modelAndView更好。例如:

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