【问题标题】:Grails Integration Test RESTful Services - params Have No ContentGrails 集成测试 RESTful 服务 - 参数没有内容
【发布时间】:2010-11-04 03:08:16
【问题描述】:

Grails 1.3.5

问题是我正在尝试测试一个使用 json 的 RESTful Web 服务。我已经阅读了 grails.org 上关于此的文档,并使用他们的 Book 示例进行了测试。我无法在控制器中获取参数以包含任何数据。所以我开始用谷歌搜索,我遇到了这个:

http://maricel-tech.blogspot.com/2009/09/grails-how-to-execute-parameters-data.html

但这甚至没有解决我的问题。任何人都知道我是否还有其他需要做的事情?我会展示我的代码,但它与用于图书消费 json 的 grails.org 文档集成测试相同。在集成测试之外,我可以使用 Firefox 插件 Post 将 json 内容发布到 Web 服务,它可以按预期工作。只有在集成测试中才会失败。谢谢。

【问题讨论】:

    标签: json rest grails


    【解决方案1】:

    我通过扩展 GrailsUnitTestCase 而不是 ControllerUnitTestCase 来实现这一点。有人可以向我解释为什么会这样吗?

    【讨论】:

      【解决方案2】:

      这是我在 ControllerUnitTestCases 中所做的

      // set param 'queryString', using a map
      controller.metaClass.getParams = {-> [queryString: "oil"] }
      
      // I have read that this should work also
      controller.request.params = [queryString: "oil"]
      

      【讨论】:

      • 谢谢亚伦。我需要阅读更多关于 GrailsUnitTestCase 和 ControllerUnitTestCase 之间差异的文档,假设这些文档甚至是准确的,因为它们目前不适合测试 REST Web 服务。
      【解决方案3】:

      就我而言,我正在扩展 GroovyTestCase,我既没有使用 GrailsUnitTestCase,也没有使用 ControllerUnitTest,因为我正在执行集成测试,而不是单元测试。

      重要的是在控制器中指定内容类型,因为内容类型决定了要启动的绑定器,只需执行以下操作:

      controller.request.contentType = "text/json"
      

      还要确保您的 URLMappings.groovy 中有 parseRequest=true 用于您尝试测试的操作。 (我认为您已经这样做了,因为这在集成测试之外对您有用)。

      【讨论】:

        猜你喜欢
        • 2016-01-06
        • 2018-11-18
        • 2023-03-30
        • 2013-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多