0

假设我有一个 TagLib 使用FormatTagLib

class MyTagLib {

  def something = {attrs, body ->
    def format = new FormatTagLib()
    out << format.formatDate(attrs.date, format: 'HH:mm')
  }

}

我为这个标签库写了一个单元测试:

class MyTagLibTests extends TagLibUnitTestCase {

  //setUp() and tearDown() ommited

  void testMyTagLib() {
    tagLib = new MyTagLib()
    tagLib.something(date: Date.parse('20/04/2012 08:00','dd/MM/yyyy HH:mm'))
    assertEquals('08:00', out.toString()) //out is mocked...
  }

}

为什么这段代码会抛出异常formatDate

org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: Tag [formatDate] does not exist. No corresponding tag library found.
4

1 回答 1

1

有几件事:

  1. 您不需要在新标签库中实例化 FormatTagLib
  2. 您的标签库中有一个错误,FormatDate 需要一张地图而不是日期和地图
  3. 如果您使用内置功能,Grails 会使测试标记库变得更加简单。

我认为一个工作示例是这样的:

class MyTagLib {
    static namespace = "myTags"

    def something = { attrs, body ->
        out << g.formatDate(date: attrs.date, format: 'HH:mm')
    }
}

通过测试:

@TestFor(MyTagLib)
class MyTagLibTests  {
    void testMyTagLib() {
        def templateOut = applyTemplate('<myTags:something date="${date}"/>', [date: new Date(12, 3, 20, 8, 0)])
        assertEquals('08:00', templateOut)
    }
}
于 2012-04-21T13:08:46.940 回答