2011-05-30 100 views
3

我写了一个Grails的标签,这只是围绕Grails select tag单元测试Grails标记

package com.example 

class MyTagLib { 
    def listTrees = {attrs -> 
    List<TreeDto> allTrees = getMandatoryAttributeValue(attrs, 'trees') 
    out << g.select(from: allTrees) 
    } 
} 

很薄的包装,我wrtitten该等级的单元测试,但是当我运行它,我执行最后一行时,出现以下错误:

groovy.lang.MissingMethodException:法无 签名: com.example.MyTagLib.select()是参数类型适用 : (java中。 util.LinkedHashMap)

运行单元测试时,似乎在g命名空间中对grails标记的引用不可用。我尝试了创建一个集成测试,但这也不起作用。

有没有办法测试一个标签,调用另一个标签,而不会剔除/嘲笑其他标签的输出?

回答

7

你必须模拟你正在使用的grails taglib,并通过metaClass机制注入它。

protected void setUp() { 
    super.setUp() 
    mockTagLib(FormTagLib) 
    def g = new FormTagLib() 
    tagLib.metaClass.g = g 
} 
+0

问题是FormTagLib的某些属性没有正确模拟。见http://jira.grails.org/browse/GRAILS-5027 – tuler 2011-07-19 19:13:42