2009-06-11 21 views
7

Grails 1.1. Benim özel etiket:Test notları taglib

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] 
    ]) 
} 

Hemen hemen ben sadece

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

o modelde doğru değerlerle oluşturulmakta olan Doğru şablonu test etmek mümkün mü bkz Taglib birim testlerin hepsi?

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 
    } 
} 

} TagLibUnitTestCase ile

cevap

6

sen işlemek yönteme sen ControllerUnitTestCase yapabildiğiniz aynı şekilde aramaları test etmek renderArgs kullanabilirsiniz. renderArgs özelliği, son aramanın argümanlarını render dinamik yönteme depolayan bir haritadır. Bu nedenle, örneğinizde, şu gibi bir şey istersiniz:

vb.

+0

Bunu çalışması için tagLib.renderArgs kullanmak zorunda kaldım. (Grails 1.3.7) –

İlgili konular