我正在尝试为控制器创建一个集成测试案例,我需要获取正在测试的控制器的视图名称。
我试图这样做:
controller?.modelAndView?.getViewName()
但是modelAndView对象为null。控制器对象不为null并通过其他测试。
为什么我得到modelAndView null?从我搜索到的是获取控制器视图名称的方式。
感谢您的帮助。
答案 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()
}
之后它正在运作