2012-10-04 41 views
5

¿Hay alguna forma de probar un controlador que utiliza un filtro en una prueba de integración?Grails Integration Test Filter

Parece que hay una forma de utilizar la anotación @Mock para Pruebas unitarias y de ajustar la llamada del controlador en un cierre de filtro.

Pero no consigo probar los filtros en una prueba de integración que desde mi punto de vista debería ser muy directa.

Actualización

Así que aquí está la solución que encontré. En lugar de usar la anotación @Mock, instalé la clase FiltersUnitTestMixin y la llené con los valores necesarios.

public class ControllerTest { 

    def controller = new Controller() 
     FiltersUnitTestMixin f = new FiltersUnitTestMixin() 

    @Before 
    public void setup() { 
     f.grailsApplication = grailsApplication 
     f.applicationContext = grailsApplication.mainContext 
     f.mockFilters(ControllerFilters) 
    } 

    @Test 
    public void shouldPassTheTest() { 
     f.withFilters(action:"actionName") { 
      controller.actionName() 
     } 
    } 
} 

Respuesta

1

que tenían el mismo problema, he encontrado este ->http://ldaley.com/post/392153102/integration-testing-grails-filters

y modificado para adaptarlo a mis necesidades que terminan con este

import grails.util.GrailsWebUtil 
import org.junit.After 
import org.junit.Before 
import org.junit.Test 

class SomethingIntegrationTests { 

    def filterInterceptor 
    def grailsApplication 
    def grailsWebRequest 

    @Before 
    void setUp() { 

    } 

    @After 
    void tearDown() { 

    } 

    @Test 
    void testFilterRedirects() { 

     def result = request("home", "index", someParameter: "2") 
     assert !result 
     assert response.redirectedUrl.endsWith(/* something */) 
    } 

    def getResponse() { 
     grailsWebRequest.currentResponse 
    } 

    def request(Map params, controllerName, actionName) { 
     grailsWebRequest = GrailsWebUtil.bindMockWebRequest(grailsApplication.mainContext) 
     grailsWebRequest.params.putAll(params) 
     grailsWebRequest.controllerName = controllerName 
     grailsWebRequest.actionName = actionName 
     filterInterceptor.preHandle(grailsWebRequest.request, grailsWebRequest.response, null) 
    } 
}