我写了一个 Grails 标签,它只是 Grails select tag 的一个非常薄的包装器。
package com.example
class MyTagLib {
def listTrees = {attrs ->
List<TreeDto> allTrees = getMandatoryAttributeValue(attrs, 'trees')
out << g.select(from: allTrees)
}
}
我已经为这个类编写了一个单元测试,但是当我运行它时,在执行最后一行时出现以下错误:
groovy.lang.MissingMethodException: No signature of method: com.example.MyTagLib.select() is applicable for argument types: (java.util.LinkedHashMap)
在运行单元测试时,似乎对 g
命名空间中的 grails 标记的引用不可用。我试过创建一个集成测试,但这也不起作用。
有没有一种方法可以测试调用另一个标签的标签,而无需 stub /模拟另一个标签的输出?
最佳答案
您必须模拟您正在使用的 grails 标签库并通过元类机制注入(inject)它。
protected void setUp() {
super.setUp()
mockTagLib(FormTagLib)
def g = new FormTagLib()
tagLib.metaClass.g = g
}
关于单元测试 grails 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6176930/