2012-10-04 24 views
5

Esiste un modo per testare un controller che utilizza un filtro su un test di integrazione?Filtro test integrazione Grails

Sembra esserci un modo per utilizzare l'annotazione @Mock per Test unità e di avvolgere la chiamata controller su a con chiusura filtro.

Ma non riesco a testare i filtri su un test di integrazione che dal mio pov dovrebbe essere molto diretto.

Aggiornamento

Quindi ecco la soluzione che ho trovato. Invece di usare l'annotazione @Mock, ho istanziato la classe FiltersUnitTestMixin e l'ho popolata con i valori necessari.

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

risposta

1

Ho avuto lo stesso problema, ho trovato questo ->http://ldaley.com/post/392153102/integration-testing-grails-filters

E modificato per soddisfare le mie esigenze che terminano con questo

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) 
    } 
} 
Problemi correlati