单元测试 grails 标签

标签 unit-testing grails groovy tags taglib

我写了一个 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/

相关文章:

groovy - 将扩展模块添加到 groovy 类

java - 模拟构建类 AWS Logs 客户端构建器

.net - MSTest 是否有流畅的断言 API?

java - 模拟 Locale.forLanguageTag

unit-testing - 使用 Controller 的 Grails Spock 单元测试断言 View

grails - 无法使用save(flush:true)将对象保存到数据库

java - 当使用运算符重载在闭包甚至方法中更新时,不会发生对列表的更新

unit-testing - 起订量和访问调用的参数

pdf - Grails呈现具有特定布局和多个页面的PDF?

java - 升级到 Spring Boot 2.4 破坏 Spock Spring 模拟