2015-04-30 10 views
5

Tôi đã thử trong Bài kiểm tra Đơn vị của mình để kiểm tra việc gửi biểu mẫu trùng lặp như trong tài liệu và nó hoạt động. http://grails.github.io/grails-doc/3.0.x/guide/testing.html#unitTestingControllersKiểm tra Tích hợp Grails - Bản sao Biểu mẫu Trùng lặp luôn không hợp lệToken

Nhưng trong Kiểm tra tích hợp của tôi, nó luôn thất bại và được đánh dấu là invalidToken. Tôi viết nó theo cách tương tự như kiểm thử đơn vị trong phần của tokenHolder.

Vậy cách xử lý mã thông báo hợp lệ vớiForm trong Kiểm tra tích hợp?

My Integration Test:

@TestFor(RegisterTestedController) 
class RegisterTestedControllerIntSpec extends Specification { 
    void "test insert data register"() { 
     given: 
     controller.params.username == 'babaenciel' 
     controller.params.companyName == 'tamago' 

     when: 
     def tokenHolder = SynchronizerTokensHolder.store(session) 
     params[SynchronizerTokensHolder.TOKEN_URI] = '/registerTested/signUp' 
     params[SynchronizerTokensHolder.TOKEN_KEY] = tokenHolder.generateToken(params[SynchronizerTokensHolder.TOKEN_URI]) 

     controller.signUp() 

     then:   
     controller.modelAndView.model.parameter.username == 'babaenciel' 
     controller.modelAndView.model.parameter.companyName == 'tamago' 
    } 
} 

Controller:

class RegisterTestedController { 
    def signUp() { 
     log.info("session: " + session.properties) 
     log.info("request: " + request.properties) 
     log.info("params: " + params) 

     def invalidToken = false 

     withForm { 
      invalidToken = false 
     }.invalidToken { 
      invalidToken = true 
     } 

     log.info("invalid token: " + invalidToken) 

     if(invalidToken) { 
      flash.code = 'alert-red' 
      flash.message = message(code: "error.general.multipleSubmission") 
      redirect action:'index' 
      return 
     }   

     render view: 'index', model: [parameter: params] 
    }  
} 

Trả lời

1

Trong hội nhập kiểm tra các params cần phải được thiết lập cho một trường hợp điều khiển mới mà bạn phải tạo bằng tay (Xem http://grails.github.io/grails-doc/2.5.0/guide/testing.html#integrationTesting). Ngoài ra, phiên không có sẵn trong các bài kiểm tra tích hợp theo mặc định. Bạn có thể tải xuống thông qua số RequestContextHolder như sau: RequestContextHolder.currentRequestAttributes().session.

Mã hiệu hoàn chỉnh sẽ giống như thế này:

YourController yourController = new YourController() 

def token = SynchronizerTokensHolder.store(RequestContextHolder.currentRequestAttributes().session) 
yourController.params[SynchronizerTokensHolder.TOKEN_URI] = '/yourController/yourAction' 
yourController.params[SynchronizerTokensHolder.TOKEN_KEY] = token.generateToken(yourController.params[SynchronizerTokensHolder.TOKEN_URI]) 

yourController.yourAction() 

Cũng lưu ý: Trong Grails 3.0 nó được khuyến khích sử dụng các xét nghiệm chức năng thay vì thử nghiệm hội nhập. Xem "Kiểm tra bộ điều khiển" trong phần Integration Testing của Tài liệu tham khảo Grails.

Các vấn đề liên quan