2010-05-17 9 views
6

Tengo un método de control, como por ejemplo:Unidad probando un método de controlador?

def search = { 
    def query = params.query 

      ... 

    render results as JSON 
} 

¿Cómo se prueba la unidad de esto? Específicamente, ¿cómo llamo a la búsqueda para establecer params.query, y cómo puedo probar los resultados del método render? ¿Hay alguna manera de burlarse del método de renderizado, quizás?

Respuesta

5

Subclase grails.test.ControllerUnitTestCase para las pruebas de su unidad. Grails creará automáticamente una instancia de tu controlador y simulará versiones de renderizado y redirección que te permitirán probar los resultados fácilmente. Simplemente asigne las entradas de prueba a controller.params para configurar la prueba.

Ejemplo:

class SomethingController { 
    def search = { 
     def query = params.query 
     ...stuff... 
     render results as JSON 
    } 
} 

La prueba se parece a:

class SomethingControllerTests extends grails.test.ControllerUnitTestCase { 
    void testSearch() { 
     controller.params.query = "test query" 
     controller.search() 
     assertEquals "expected result", controller.response.contentAsString 
    } 
} 

Nota: se puede usar para pruebas de integración ControllerUnitTestCase también, si se necesita un entorno de integración completa con la base de datos.

0

Hay dos maneras de probar la unidad, pero se requieren algunos cambios.

Lo primero es probar la unidad del controlador en sí mismo, sin agregar la complejidad del análisis de http, por lo que escribiría la prueba de unidad y pasaría la prueba de params como parte de la prueba de unidad, por lo tanto, divida su función de búsqueda en dos funciones:

def search = { 
    def query = params.query 
    render realSearch(query) as JSON 
} 

def realSearch ... 

Así, la primera parte realSearch pruebas.

Luego, la segunda parte es escribir una aplicación que realmente se conectará a su aplicación web y realizar una prueba funcional que probará toda la aplicación, incluidas las partes del controlador que no se probaron en la primera parte .

0

TFM: Grails ref chapter 9

seguir el ejemplo testCreateWithJSON() ... sólo cosas de su cadena de consulta en params [ 'consulta'], ajuste el contentType, la búsqueda de llamadas(). Como llama explícitamente a renderizar, lo más curioso sería mirar el response.contentAsString ... Probablemente solo haga afirmaciones de coincidencia de patrones sobre contentAsString; podría volver a analizarlo como JSON y luego examinar ese árbol de objetos, pero sospecho que no va a ser tan claro/rápido como las simples aserciones de patrones y coincidencias.

Cuestiones relacionadas