2009-06-11 9 views
7

Grails 1.1. Mi etiqueta personalizada:Prueba de grails 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] 
    ]) 
} 

Casi todas las pruebas unitarias taglib sólo veo

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

¿Es posible probar que la plantilla correcta está siendo prestado por los valores correctos en el modelo?

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

}

Respuesta

6

Con TagLibUnitTestCase puede utilizar para probar renderArgs llamadas al método render de la misma manera que puedas en ControllerUnitTestCase. La propiedad renderArgs es simplemente un mapa que almacena los argumentos de la última llamada al método dinámico render. Entonces, en su ejemplo usted querría algo como esto:

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

y así sucesivamente.

+0

Tuve que usar tagLib.renderArgs para que esto funcione. (Grails 1.3.7) –

Cuestiones relacionadas