Grails可以查看控制器

时间:2011-03-22 17:42:02

标签: grails integration-testing

我正在尝试为控制器创建一个集成测试案例,我需要获取正在测试的控制器的视图名称。

我试图这样做:

controller?.modelAndView?.getViewName()

但是modelAndView对象为null。控制器对象不为null并通过其他测试。

为什么我得到modelAndView null?从我搜索到的是获取控制器视图名称的方式。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

在我执行控制器操作方法之后需要在集成测试中获取模型时,我遇到了类似的问题,所以我做的是我从Controller更改了渲染方法以便能够获取地图被传递给它以便能够获得模型。所以我在测试方法中有一个名为renderMap的变量,然后在我做了

Map renderMap

registerMetaClass(MyController.class)
MyController.metaClass.render = {Map m ->
  renderMap = m
}
...
// Instantiate controller
// Call controller action

然后我能够访问我在模型中设置的一些对象:

def someObject = renderMap.model.someObject

因此,您应该可以这样做:

String view = renderMap.view

在某些时候,您可能希望恢复控制器的metaClass。

答案 1 :(得分:0)

测试用例适用于旧版本的Grails,但由于1.3.5无效,我不得不添加行来将record.id添加到这样的参数:

    void testUpdateSaveError(){

    recordWrongParams.each{key, value->
        controller.params.put(key,value)
    }
    controller.params.put("id", record.id)      
    controller.update()         

    assertEquals controllerPath + "/edit", controller?.modelAndView?.getViewName()      
}

之后它正在运作