2011-03-22 84 views
1

我正在尝试为控制器进行集成测试用例,我需要获取正在测试的控制器的视图名称。Grails获取控制器的视图

我试图做这种方式:

controller?.modelAndView?.getViewName() 

但ModelAndView对象为空。控制器对象不为空并通过其他测试。

任何想法为什么我得到modelAndView为空?从我搜索的是获得控制器视图名称的方式。

感谢您的帮助。

回答

0

我在执行控制器动作方法后需要在集成测试中获取模型之前遇到类似问题,所以我所做的是将控制器的渲染方法更改为可以获取地图传递给它以便能够获得模型。所以我不得不在被称为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。

+0

感谢您的反馈Maricel。我认为这不是我的情况,因为控制器在另一个测试用例上运行良好。问题是我不得不手动将id放在地图上(params)来创建一个新的域类实例。它在过去的Grails版本上运行良好,但在1.3.5上无法正常工作。我会在这里发布我的解决方案。 – Arturo 2011-03-23 21:34:45

0

测试用例工作在旧版本的Grails但因为1.3.5它不工作,我不得不添加行到record.id添加到PARAMS这样的:

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()  
} 

后它的工作