2012-08-12 19 views
5

कुछ इकाई/एकीकरण परीक्षण में वसंत सुरक्षा नकल करने के लिए एक रास्ता तलाश रहे हैं।नकली Grails वसंत सुरक्षा उपयोगकर्ता में लॉग इन

  • Grails: v2.1.0
  • स्प्रिंग सुरक्षा कोर: V1.2.7.3

नियंत्रक है निम्नलिखित:

//some action 
def index(){ 
    def user = getLoggedInUser() 
    render .... 
}... 

private getLoggedInUser(){ 
    return User.get(springSecurityService.principal.id) 
} 

मैं निम्नलिखित और विभिन्न अन्य तरीकों की कोशिश की लेकिन इसे काम करने के लिए नहीं देख सकता:

void testSomething(){ 
    def dc = new SomeController() 
    dc.springSecurityService = [ 
      encodePassword: 'password', 
      reauthenticate: { String u -> true}, 
      loggedIn: true, 
      principal: [username:"Bob"]] 
    dc.index() ... assertion.... 

ऐसा लगता है कि उपयोगकर्ता नहीं बनाया जा रहा है और सिद्धांत.आईडी प्राप्त नहीं कर सकता है। कोई सुझाव या बेहतर विकल्प?

उत्तर

3

मुझे लगता है कि उपयोगकर्ता अभी बनाया जा रहा है, लेकिन सहेजा नहीं गया है, और यही कारण है कि इसमें कोई आईडी नहीं है।

समाधान इस हो सकता है:

void testSomething(){ 
    def dc = new SomeController() 
    def loggedInUser = new User(...).save() 
    dc.metaClass.getLoggedInUser = { loggedInUser } 
... 

मैं getLoggedInUser करने के लिए एक refactor सुझाव है:

void testSomething(){ 
    def dc = new SomeController() 
    def loggedInUser = new User(username: "Bob").save() // This way the user will have an ID 
    dc.springSecurityService = [ 
     encodePassword: 'password', 
     reauthenticate: { String u -> true}, 
     loggedIn: true, 
     principal: loggedInUser] 
    dc.index() ... assertion.... 

एक विकल्प नहीं है

private getLoggedInUser(){ 
    return springSecurityService.currentUser 
} 

इस परिवर्तन के साथ, आप लिख सकते हैं :

void testSomething(){ 
    def dc = new SomeController() 
    def loggedInUser = new User(...).save() 
    dc.springSecurityService = [ 
     encodePassword: 'password', 
     reauthenticate: { String u -> true}, 
     loggedIn: true, 
     getCurrenUser: { loggedInUser }] 
... 
+0

उसके लिए चीयर्स। :) – DanyZift

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

  • कोई संबंधित समस्या नहीं^_^