2012-10-04 10 views
5

Czy istnieje sposób na sprawdzenie kontrolera, który używa filtra do testu integracji?Filtr testowy integracji Grailsa

Wygląda na to, że istnieje sposób, w jaki stosuje się adnotację @Mock do testów jednostkowych, a następnie zawijanie wywołania kontrolera na zamknięciuFiltra.

Nie mogę jednak przetestować filtrów w teście integracji, który z mojego punktu powinien być bardzo prosty.

Aktualizacja

Oto rozwiązanie, które znalazłem. Zamiast adnotacji @Mock, utworzyłem instancję klasy FiltersUnitTestMixin i uzupełniłem ją o niezbędne wartości.

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

Odpowiedz

1

miałem ten sam problem, znalazłem to ->http://ldaley.com/post/392153102/integration-testing-grails-filters

i zmodyfikowała go do moich potrzeb kończąc tym

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