使用Grails 2.1.0Grails控制器在渲染模板時測試關於模型的斷言?
看來,從控制器這樣做:
render(view: "someView", model: [modelEntry: "hello"])
允許我這樣做是爲控制單元測試:
controller.method()
assert model.modelEntry == "hello"
但是,如果我改變控制器做到這一點:
render(template: "someTemplate", model: [modelEntry: "hello"])
現在模型測試中的實例是一個空數組。我已經做了相當多的搜索,大部分解決方案似乎都是針對Grails 1的,通常涉及modelAndView
對象(我的測試中不存在)或renderArgs
(同上)。
我發現的唯一的解決辦法是,以手動覆蓋測試中的觀點,這樣的:
views['_someTemplate.gsp'] = '${modelEntry}'
然後發表關於字符串斷言。但是,我不喜歡這個方案,因爲它:
- 需要測試知道模板的測試模型項的文件名
- 讓人難以不具有良好的toString()方法
- 讓人難以對相關模型條目進行多重斷言。
當控制器呈現模板時,是否有任何方法可以更直接地從測試用例中獲取模型中的條目?
'controller.modelAndView.model'不存在? – 2013-02-28 17:09:36
@SérgioMichels正確,'controller.modelAndView'爲空。請記住,這是使用慣用的Grails 2風格,其中測試被聲明爲「@TestFor(WhateverController)」,測試不會擴展任何東西。我不確定modelAndView是否適用於Grails 1,或者爲什麼我總是看到這個建議,但它不在Grails 2的這種類型的測試中。 – Rod 2013-02-28 19:26:01