2013-04-06 76 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方式。