2015-04-30 5 views
5

मैं डॉक्स में तरह डुप्लीकेट प्रपत्र प्रस्तुत करने का परीक्षण करने के लिए अपने यूनिट टेस्ट में की कोशिश की है और यह काम किया। http://grails.github.io/grails-doc/3.0.x/guide/testing.html#unitTestingControllersGrails एकता टेस्ट - डुप्लिकेट फ़ॉर्म सबमिशन हमेशा invalidToken

लेकिन मेरे एकीकरण परीक्षण में, यह हमेशा असफल रहा और अवैध टोकन के रूप में चिह्नित किया गया। मैं tokenHolder के हिस्से में इकाई परीक्षण की तरह एक ही तरीके से लिखते हैं।

तो एकता टेस्ट में मान्य टोकन withForm को संभालने के लिए?

मेरे एकता टेस्ट:

@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' 
    } 
} 

नियंत्रक:

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

उत्तर

1

एकीकरण में परीक्षण पैरामीटर एक नया नियंत्रक उदाहरण आप मैन्युअल रूप से (http://grails.github.io/grails-doc/2.5.0/guide/testing.html#integrationTesting देखें) बनाने के लिए के लिए सेट किया जाना चाहिए। इसके अलावा सत्र डिफ़ॉल्ट रूप से एकीकरण परीक्षणों में उपलब्ध नहीं है। आप RequestContextHolder इस तरह के माध्यम से इसे प्राप्त कर सकते हैं: RequestContextHolder.currentRequestAttributes().session

पूरा कोड इस तरह दिखना चाहिए:

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

भी ध्यान रखें: Grails 3.0 में यह एकीकरण परीक्षणों के बजाय कार्यात्मक परीक्षण का उपयोग करने की सिफारिश की है। "परीक्षण नियंत्रकों" देखें Grails संदर्भ प्रलेखन की धारा Integration Testing में।

संबंधित मुद्दे