Testing 测试在主体中使用变量的grails迭代标记库

Testing 测试在主体中使用变量的grails迭代标记库,testing,grails,groovy,taglib,Testing,Grails,Groovy,Taglib,我有一个非常简单的taglib,如下所示(为了示例,查询被简化): 但它一直在失败。测试输出抱怨“没有这样的属性:类的主题:MySampleTagLibTests” 出于某种原因,它试图在将字符串传递给taglib之前求值${topic.name}。我尝试了转义dollar sing,但没有成功。关于这一点有什么提示吗?要测试taglib,您应该扩展TagLibUnitTestCase。当您使用这个类时,您不会直接实例化您的标记类(如上面的代码所示),而是通过tagLib属性为您提供了一个实例。

我有一个非常简单的taglib,如下所示(为了示例,查询被简化):

但它一直在失败。测试输出抱怨“没有这样的属性:类的主题:MySampleTagLibTests”


出于某种原因,它试图在将字符串传递给taglib之前求值${topic.name}。我尝试了转义dollar sing,但没有成功。关于这一点有什么提示吗?

要测试taglib,您应该扩展
TagLibUnitTestCase
。当您使用这个类时,您不会直接实例化您的标记类(如上面的代码所示),而是通过
tagLib
属性为您提供了一个实例。例如,假设我要测试
FooTagLib
repeat
标记。该标记采用单个属性,并期望该标记具有使用变量的主体

class FooTagLibTests extends TagLibUnitTestCase {

  FooTagLibTests() {
    // This line isn't necessary in this case because the test class is in the same package 
    // as the tag class and named ${TagLib}Tests
    super(FooTagLib)
  }

  void testRepeat() {

    def someText = 'blah'

    // tagLib references an instance of FooTagLib. Invoke the bar tag passing it attribute
    // values and a body
    tagLib.repeat(times: '2') {
      "body $someText "
    }

    // compare the expected and actual output
    assertEquals 'body someText body someText ', tagLib.out.toString()
  }
}

这应该在grails 1.3.5上运行吗?另外,如果$someText是在taglib中定义的,为什么需要在测试中声明它?在我的例子中,即使使用TagLibUnitTestCase,它仍然会失败,并显示相同的消息。如果您显示代码和错误消息,也许我可以帮助您
    <g:toptopics>
        <li><a href="#">${topic.name}</a></li> 
    </g:toptopics>
void setUp() {
    taglib = new MySampleTagLib()
}

void test_each_in_collection() {
    assertEquals("tag 1;tag 2", taglib.toptopics() { "${topic.name};" })
}
class FooTagLibTests extends TagLibUnitTestCase {

  FooTagLibTests() {
    // This line isn't necessary in this case because the test class is in the same package 
    // as the tag class and named ${TagLib}Tests
    super(FooTagLib)
  }

  void testRepeat() {

    def someText = 'blah'

    // tagLib references an instance of FooTagLib. Invoke the bar tag passing it attribute
    // values and a body
    tagLib.repeat(times: '2') {
      "body $someText "
    }

    // compare the expected and actual output
    assertEquals 'body someText body someText ', tagLib.out.toString()
  }
}