我正在为grails中的控制器进行集成测试。我需要在测试用例中传递查询字符串,并将其作为controller.request.queryString
传递给它。
我的测试失败了。它为查询String参数提供了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
}
}
我在foll电话中收到groovy.lang.MissingMethod.Exception
:
User.findByUsername(userId) //userId is comming null
答案 0 :(得分:1)
控制器更改:
def userId = request.getParameter("uid")
到
def userId = params.uid
int test中的变化:
userExController.request.queryString='uid=rp123'
到
userExController.params.uid='rp123'
Grails的动态绑定有助于将查询参数绑定到params
并请求控制器中的request
。
答案 1 :(得分:0)
这应该让事情适合你(在Grails 2.0.4上测试):
userExController.request.addParameter('uid', 'rp123')
但是,我建议转向dmahapatro的建议并重构您的控制器以使用params.uid
代替request.getParameter("uid")
。甚至引入一个命令对象。你现在这样做的方式似乎并不是标准的Grails方式。