2011-03-22 125 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()  
} 

後它的工作

相關問題