Secciones

Artículos para tus primeros pasos

Si estás empezando a introducirte en el mundo de Groovy y Grails, no te pierdas nuestros artículos básicos: 

Entrevistas con los expertos
 

Los protagonistas te cuentan de qué van los proyectos más importantes del mundo Groovy:


Un proyecto de:
ImaginaWorks
Campus Escuela de Groovy

Grails

Problemas con los test de integración.

Pilli - miércoles 23/12/2009

Hola a todos.

Tengo la versión 1.0.4 del manual de Nacho Brito sobre desarrollo web con Grails y he llegado a la parte debaterías de pruebas, las pruebas de unidad las he realizado sin problemas, pero me he atrancado en las de integración. Los 2 ejemplos de pruebas de integración que hay en el manual me fallan. El fallo es el mismo en las 2, es como si no se guardara el objeto Persona por lo que falla al referenciarlo.

Pongo el código de mis clases para ver si me podeis ayudar.

 ------------------------- GenteTest.groovy --------------------------------

import grails.test.*

class GenteTests extends GrailsUnitTestCase {
   
    def genteService
   
    protected void setUp() {
        super.setUp()
    }

    protected void tearDown() {
        super.tearDown()
    }

    void testToXML() {
        Persona p = new Persona(
            nombre:'Nacho',
            apellidos:'Brito',
            email:'nacho@imaginaworks.com'
        ).save(flush:true)

        def gc = new GenteController()

        gc.toXML()

        def resp = gc.response
        def xmlStr = resp.contentAsString
        def listado = new XmlSlurper().parseText(xmlStr)

        assertEquals resp.contentType, 'text/xml'
        assertEquals 1, listado.persona.size()
        assertEquals p.id, listado.persona[0].@id.text().toLong()
    }
   
    void testSave(){
        def gc = new GenteController()
        gc.genteService = genteService
        gc.params.nombre = 'Francisco'
        gc.params.apellidos = 'Ejemplo'
        gc.params.email = 'jg@test.com'

        def p = gc.save()

        assertNotNull p
        assertEquals 'Francisco',p.nombre
        assertnotNull p.id
    }
}

 ------------------------- GenteTest.groovy --------------------------------

 ------------------------- GenteController.groovy---------------------------

 import grails.converters.XML

class GenteController {

    def genteService
    
    def index = {
        redirect(action:toXML)
    }
    
    //URL: /gente/toXML
    def toXML = {
        /*
            Definimos valores de ordenacion y paginacion por defecto.
        */
        if (!params.max) params.max = 25
        if (!params.offset) params.offset = 0
        if (!params.order) params.order = 'id'
        if (!params.sort) params.sort = 'desc'

        //Generamos el listado en XML
        render Persona.list() as XML
    }
    
    def save = {
        def p = genteService.saveOrUpdate(params)
        if (p.hasErrors()){
            flash.message = 'Se produjeron errores'
        }
        return p
    }
}
 ------------------------- GenteController.groovy---------------------------

  ------------------------- GenteService.groovy---------------------------

class GenteService {

    boolean transactional = false

    /*
        Se asegura de que ambas personas se tengan como amigos
    */
    def addToFriends(Persona p1, Persona p2) {
        if (!p1.amigos.contains(p2)){
            p1.amigos.add(p2)
        }
        if (!p2.amigos.contains(p1)){
            p2.amigos.add(p1)
        }
    }
   
    public Persona saveOrUpdate(params){
        def p
        if (params.id){
            p = Persona.get(params.id)
        }
        else{
            p = new Persona()
        }
        p.properties = params
        p.save()
    }

   
}

 ------------------------- GenteService.groovy---------------------------

 El primer fallo me da en GenteTest.groovy en el método testToXML en "assertEquals 1, listado.persona.size()" dice que no hay personas.

El siguente fallo lo da en GenteController.groovy en la acción save en "p.hasErrors()" dice que no se puede invocar un metodo de un objeto nulo.

Por lo que he llegado a entender el fallo está al guardar el objeto persona, pero no logro arreglarlo.

¿Sabe alguién en qué me estoy equivocando?

Muchas gracias y felices fiestas a todos.

 

 

 

Re: Problemas con los test de integración.

Nacho - martes 29/12/2009
Hola, ¿con qué versión de Grails estás haciendo las pruebas?

Re: Problemas con los test de integración.

Pilli - jueves 31/12/2009

Hola.

 

Con la 1.1.2

Responder al hilo | Volver al foro "Grails" | Volver a los foros