我在Grails的自定义Taglib中有一个简单的Tag,如下所示:
def Bar = {attrs, body ->
Bar bar = Bar.get(attrs.id)
out << render(template: '/bar', plugin: 'web-core', model: bar)
}
我需要运行单元测试...
但是我想使用模拟渲染-RenderTagLib或GroovyPagesTemplateRenederer检查正确的模型,并给出模板的名称,而不是使用
when:
String string = applyTemplate <foo:bar id="1" />
then:
string.contains('Bar 1')
例如:我试图像这样模拟GroovyPagesTemplateRenderer:
设置:
def mock = Mock (GroovyPagesTemplateRenderer) {
render(_,_,_,_,_) >> //something
}
但是render是void方法以及makeTemplate,所以我不知道该怎么做?
还是对Taglib进行单元测试的最佳方法是什么?
如果要更改Taglib的视图,输出可能会有所不同。因此,我将不得不同时更改两个单元测试(视图,tagLib)。
这就是为什么我需要分别和视图一起测试Taglib类的原因。
谢谢您的回答 ...
您可以render()
通过常规的元编程替换方法来检查参数。
@TestFor(RenderTagLib)
@Mock(Bar)
class RenderTagLibSpec extends Specification {
Map render
Bar bar
def setup() {
bar = new Bar ()
bar.save (failOnError: true)
tagLib.metaClass.render = { Map attrs ->
render = attrs
}
}
void "bar() passes the correct parameters to render()"() {
when:
tagLib.bar (id:bar.id)
then:
render.template == '/bar'
render.plugin == 'web-core'
render.model == bar
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句