2013-04-06 78 views
1

我正在爲grails中的控制器進行集成測試。我需要在測試用例中傳遞查詢字符串,並且我將它傳遞爲controller.request.queryStringgrails集成測試:查詢字符串參數爲空

我的測試失敗了。它爲查詢字符串參數提供null value

控制器 - UserExController

FOLL是我正在做整合testing.In這個我在讀書的查詢字符串參數「UID」和獲得userInstance使用GORM方法

def getUser() { 
    //reading the query string parameter 'uid' 
    def userId = request.getParameter("uid") 
    User user = User.findByUsername(userId) 
    render view:'edit', model:[userInstance:user] 
} 

行動這是測試。在這我傳遞的查詢字符串參數上面寫的行動,並呼籲行動

class UserInstanceTests extends GroovyTestCase { 

    @Test 
    void testPerfSummaryApi() { 
     def userExController=new UserExController() 
     userExController.request.queryString='uid=rp123' 
     userExController.getUser() 
     def model = userExController.modelAndView.model.userInstance 
     assertNotNull model 
    } 
} 

我越來越groovy.lang.MissingMethod.Exception在FOLL電話:

User.findByUsername(userId) //userId is comming null 

回答

1

變化控制器:

def userId = request.getParameter("uid") 

def userId = params.uid 

變化INT測試:

userExController.request.queryString='uid=rp123' 

userExController.params.uid='rp123' 

Grails的動態綁定有助於將查詢參數綁定到params並請求控制器中的request

+0

感謝您的回覆,但將userExController.request.queryString ='uid = rp123'更改爲userExController.params.uid ='rp123'不會改變任何內容。錯誤仍然存​​在。控制器代碼工作正常,爲什麼要更改控制器?我不認爲有必要改變已經運行的代碼來進行集成測試。 – 2013-04-06 18:02:06

0

這應該使事情爲你工作(在Grails的2.0.4測試):

userExController.request.addParameter('uid', 'rp123') 

不過,我會建議轉向dmahapatro的建議,並重構您的控制器使用params.uid而不是request.getParameter("uid")。甚至引入一個命令對象。你現在這樣做的方式似乎不是標準的Grails方式。