7

グレイル 1.1. 私のカスタムタグ:

class MyTagLib {
  static namespace 'ct'
  def textField = {attrs ->
    def bean = attrs.remove('bean')
    def field = attrs.remove('field')
    attrs.name = field
    out << render(template:"/templates/textField", model:[
        required: !bean.constraints[field].nullable,
        display : bean["${bean.trainingExperience.type}"][field],
        theTag : g.textField(name : field, value : bean[field]),
        value : bean[field]
    ])
}

私が見ているほぼすべてのtaglib単体テスト

AssertEquals "Some String", taglib.out.toString()

正しいテンプレートがモデルの正しい値でレンダリングされていることをテストすることは可能ですか?

MyTagLibTests

public class CareertracTagLibTests extends TagLibUnitTestCase{
  protected void setUp() {
    super.setUp()
    mockTagLib(FormTagLib)
    mockTagLib(RenderTagLib) 
    def g = new FormTagLib() // interpret "g" namespace as instances of FormTagLib
    tagLib.metaClass.g = g
    String.metaClass.encodeAsHTML = {org.codehaus.groovy.grails.plugins.codecs.HTMLCodec.encode(it)}
  }
  void TestTextField() {
    tagLib.textField([bean : mockBean, field : 'viewField'])
    def x = new RenderTagLib().render(template:"/templates/textField", 
      model:[required:false, 
              display:"view",
              // Snip 
            ])
    assertEquals tagLib.out, x.out // Or something like this
  }
} 

}

4

1 に答える 1

6

TagLibUnitTestCase使用renderArgsすると、でできるのと同じ方法で、renderメソッドの呼び出しをテストできますControllerUnitTestCase。プロパティは、動的メソッドrenderArgsへの最後の呼び出しの引数を格納する単なるマップです。renderしたがって、あなたの例では、次のようなものが必要になります。

assertEquals "/templates/textField", renderArgs.template
assertFalse renderArgs.model.required

等々。

于 2011-02-04T08:30:05.597 に答える