2012-10-04 33 views
5

Có cách nào để kiểm tra bộ điều khiển sử dụng bộ lọc trên thử nghiệm tích hợp không?Bộ lọc kiểm tra tích hợp Grails

Dường như có cách sử dụng chú thích @Mock cho Bài kiểm tra đơn vị và hơn bao gói cuộc gọi bộ điều khiển trên một kết thúc withFilter.

Nhưng tôi không thể thử nghiệm các bộ lọc trên một bài kiểm tra tích hợp mà từ pov của tôi nên rất thẳng về phía trước.

Cập nhật

Vì vậy, đây là giải pháp tôi tìm thấy. Thay vì sử dụng chú giải @Mock, tôi đã khởi tạo lớp FiltersUnitTestMixin và điền nó với các giá trị cần thiết.

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

Trả lời

1

tôi đã cùng một vấn đề, tôi thấy điều này ->http://ldaley.com/post/392153102/integration-testing-grails-filters

Và sửa đổi nó cho phù hợp với nhu cầu của tôi kết thúc với điều này

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) 
    } 
} 
Các vấn đề liên quan