繁体   English   中英

如何在(Spock,Grails)单元测试Taglib中模拟渲染?

[英]How to mock render in (Spock, Grails) unit testing Taglib?

我在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类以及查看它的原因。

谢谢您的回答 ...

您可以通过groovy元编程替换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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM