好的,我在自定义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>"
}
答案 0 :(得分:0)
您可以使用
模拟taglib@TestMixin(GroovyPageUnitTestMixin)
class MultipleTagLibSpec extends Specification {
void "test multiple tags"() {
given:
mockTagLib(sliderTagLib)
expect:
// …
}
}
你不应该在应用程序上下文中查找sliderTagLib
bean。您可以通过调用taglib-namespace
。taglib-method
来简单地调用taglib。
E.g。 Grails标记库位于g
命名空间中。因此请像这样使用它。
def preference = { attrs, body ->
out << g.link(...)
// in your case
yourNamespace.slider(....)
}