0

使用するTagLibが1つあるとしましょうFormatTagLib

class MyTagLib {

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

}

そして私はこのtaglibのユニットテストを書きました:

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. 新しいtaglibでFormatTagLibをインスタンス化する必要はありません
  2. タグライブラリにバグがあります。FormatDateは日付とマップではなくマップを取得します
  3. 組み込みの機能を使用すると、Grailsによってtaglibのテストが非常に簡単になります。

実例はこれだと思います:

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 に答える