【问题标题】:Integration Tests in grails: getting null in query string parametergrails 中的集成测试:在查询字符串参数中获取 null
【发布时间】:2013-04-06 16:41:05
【问题描述】:

我正在为 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

【问题讨论】:

    标签: grails request.querystring integration-testing


    【解决方案1】:

    控制器变化:

    def userId = request.getParameter("uid")
    

    def userId = params.uid
    

    int 测试的变化:

    userExController.request.queryString='uid=rp123'
    

    userExController.params.uid='rp123'
    

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

    【讨论】:

    • 感谢您的回复,但将 userExController.request.queryString='uid=rp123' 更改为 userExController.params.uid='rp123' 并没有改变任何内容。错误仍然存​​在。为什么在控制器代码工作正常时对控制器进行更改。我认为不需要更改已经运行的代码来使集成测试正常工作。
    【解决方案2】:

    这应该会让事情对你有用(在 Grails 2.0.4 上测试):

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-19
      • 2017-12-09
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-24
      • 2020-05-26
      相关资源
      最近更新 更多