在控制器单元测试中添加自定义TagLib方法。

| 我在自定义taglib中有一个方法,如下所示:
def deleteAction = {attrs ->
    def id = attrs[\'id\']
    def type = attrs[\'type\']
    def clazz = attrs[\'class\']
    def html = new MarkupBuilder(out)
    html.span(class: \"${clazz} ui-icon ui-icon-trash {id:\'${id}\'}\")
}
我有一个使用此方法的控制器,我正尝试将其存入单元测试中,因此需要以下内容:
def mockMyTagLib = mockFor(MyTagLib)
    mockMyTagLib.demand.deleteAction(1) {id, type, clazz ->
    def html = new MarkupBuilder(new StringWriter())
    html.span(class: \"${clazz} ui-icon ui-icon-trash {id:\'${id}\'}\")
}

controller.metaClass.mn = mockMyTagLib.createMock()
但是我不断得到以下信息:   不再调用\'deleteAction \'   预计在这一点上。结束   需要。 我在这里做错什么了吗?这是控制器中的实际用法:
\"${mn.deleteAction(id: it.id, type: \'bookProduct\', \'class\': \'del-book-product\')}\"
    
已邀请:
以下来自测试-参考文档   ...然后,您指定的名称   您要模拟的方法   可选范围作为其参数。这个   范围决定了您多少次   期望该方法被调用,所以如果   调用次数下降   超出该范围(太少   或太多),然后出现断言错误   将被抛出。如果没有范围   指定,默认值为\“ 1..1 \”   假设,即该方法必须是   刚打过一次。 您已经指定了demand.deleteAction(1),这意味着该方法必须被调用一次,并且只能被调用一次。 另外,如果需要,可以始终通过将其指定为模拟变量中的第二个参数来将其模拟变量设置为宽松(默认为严格)
mockFor(class, loose = false)
    

要回复问题请先登录注册