Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何在(Spock,Grails)单元测试Taglib中模拟渲染?_Unit Testing_Grails_Taglib_Spock - Fatal编程技术网

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

Unit testing 如何在(Spock,Grails)单元测试Taglib中模拟渲染?,unit-testing,grails,taglib,spock,Unit Testing,Grails,Taglib,Spock,我在Grails中的自定义标记库中有一个简单的标记,如下所示: def Bar = {attrs, body -> Bar bar = Bar.get(attrs.id) out << render(template: '/bar', plugin: 'web-core', model: bar) } 但render是void方法,也是makeTemplate,所以我不知道怎么做 或者,单元测试Taglib的最佳方法是什么 如果我改变Taglib的

我在Grails中的自定义标记库中有一个简单的标记,如下所示:

def Bar = {attrs, body ->
      Bar bar = Bar.get(attrs.id)
      out << render(template: '/bar', plugin: 'web-core', model: bar)
  }
但render是void方法,也是makeTemplate,所以我不知道怎么做

或者,单元测试Taglib的最佳方法是什么

如果我改变Taglib的视图,输出可能会不同。因此,我必须更改这两个单元测试(视图、tagLib)

这就是为什么我需要单独测试Taglib类以及view


感谢您的回答…

您可以通过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
    }
}
def mock = Mock (GroovyPagesTemplateRenderer) {

        render(_,_,_,_,_) >> //something 
    }
@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
    }
}