1

我正在为 grails 中的控制器进行集成测试。我需要在测试用例中传递查询字符串,并且我正在传递它controller.request.queryString

我的测试失败了。它给了我null value查询字符串参数。

控制器 - 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
4

2 回答 2

1

控制器变化:

def userId = request.getParameter("uid")

def userId = params.uid

int测试的变化:

userExController.request.queryString='uid=rp123'

userExController.params.uid='rp123'

Grails 的动态绑定有助于将查询参数params和请求绑定到request控制器中。

于 2013-04-06T17:22:05.803 回答
0

这应该会让事情为你工作(在 Grails 2.0.4 上测试):

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

但是,我建议转向 dmahapatro 的建议并重构您的控制器以使用params.uid而不是request.getParameter("uid"). 甚至引入一个命令对象。你现在做的方式似乎不是标准的 Grails 方式。

于 2013-04-07T12:04:34.830 回答