使用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