在Grails spock测试中,如何模拟自定义taglib中调用的自定义taglib?

时间:2014-06-16 11:35:29

标签: unit-testing grails spock grails-2.3

好的,我在自定义taglib中有一个自定义taglib,如下所示:

def preference = { attrs, body ->

        def sliderTaglib = grailsApplication.mainContext.getBean('com.myCustom.sliderTagLib')
        sliderTaglib.slider.call(attrs, body)

}

由于我使用grailsApplication.mainContext.getBean(),我如何在单元测试中模拟它?我的测试抱怨:

grails Error executing tag No bean named is defined...

我尝试了各种方法来嘲笑它,但无济于事。它在我运行应用程序时正常运行,它只是失败的测试。我正在使用grails 2.3.9和spock。 :(

我的测试看起来像这样:

void "taglib should output a slider"() {
    when:
    def result = applyTemplate("""
        <a:preference class='slider'/>
    """)
    then:
    result == "<div class='slider'></div>"
}

1 个答案:

答案 0 :(得分:0)

您可以使用

模拟taglib
@TestMixin(GroovyPageUnitTestMixin)
class MultipleTagLibSpec extends Specification {

    void "test multiple tags"() {
        given:
        mockTagLib(sliderTagLib)

        expect:
        // …
    }
}

你不应该在应用程序上下文中查找sliderTagLib bean。您可以通过调用taglib-namespacetaglib-method来简单地调用taglib。

E.g。 Grails标记库位于g命名空间中。因此请像这样使用它。

def preference = { attrs, body ->
    out << g.link(...)
    // in your case
    yourNamespace.slider(....)
}