2011-03-29 69 views
2

在集成測試中,在控制器中發出render命令之後,有什麼方法可以獲得什麼視圖和已作爲模型傳遞的內容?例如:在grails控制器集成測試中訪問模型和視圖信息

render view: 'edit', model: [profileInstance: someProfile] 

任何機會我可以檢索模型和視圖來執行一些斷言?我知道如何在單元測試中做到這一點,但它在集成測試中也很方便。

回答

4

您可以從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上,因爲它是一些點。

+0

我該如何恢復控制器的metaClass? – jjczopek 2011-03-29 19:41:45

+0

該方法registerMetaClass存在於GrailsUnitTestCase類中,但是因爲對於集成測試,我沒有從這個類擴展我所做的是將該代碼移動到我的集成測試的基類,因此您可以檢查registerMetaClass方法如何在GrailsUnitTestCase類的源代碼以及如何在tearDown方法中恢復metaClass。如果你仍然需要我把確切的代碼放在這裏,請讓我知道。 – Maricel 2011-03-29 19:54:01

+1

澄清Maricel的評論。 [GrailsUnitTestCase源代碼在這裏](https://svn.codehaus.org/grails/branches/GRAILS_1_1/src/groovy/grails/test/GrailsUnitTestCase.groovy)只需在測試中添加'Map savedMetaClasses = [:]'即​​可大小寫,然後複製registerMetaClass和tearDown方法。這使您可以在集成測試中使用上述方法。謝謝。 – Chris 2011-06-14 20:20:57