我正在为grails中的控制器做集成测试。我需要在测试用例中传递查询字符串,我将其作为controller.request.queryString
传递。
我的测试失败了。它给我null value
作为查询字符串参数。
Controller - UserExController
Foll是我正在进行集成测试的操作。在此,我正在读取查询字符串参数'uid'并使用GORM方法获取userInstance
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
:
User.findByUsername(userId) //userId is comming null
控制器更改:
def userId = request.getParameter("uid")
def userId = params.uid
int测试的变化:
userExController.request.queryString='uid=rp123'
userExController.params.uid='rp123'
Grails的动态绑定有助于将查询参数绑定到params
,将请求绑定到控制器中的request
。
这应该能让你正常工作(在Grails 2.0.4上测试):
userExController.request.addParameter('uid', 'rp123')
然而,我建议转向dmahapatro的建议,重构您的控制器以使用params.uid
而不是request.getParameter("uid")
。或者甚至引入命令对象。