grails中的集成测试:查询字符串参数为空



我正在为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")。或者甚至引入命令对象。

相关内容

  • 没有找到相关文章

最新更新