技术开发 频道

精通 Grails: 用 JSON 和 Ajax 实现异步 Grails

  测试控制器

  在 test/integration 中创建 AirportMappingControllerTests.groovy。添加清单 7 中的 2 个测试:

  清单 7. 测试一个 Grails 控制器

class AirportMappingControllerTests extends GroovyTestCase{
  void testWithBadIata(){
    def controller
= new AirportMappingController()
    controller.metaClass.getParams
= {->
      return [
"id":"foo"]
    }
    controller.iata()
    def response
= controller.response.contentAsString
    assertTrue response.contains(
"\"name\":\"Not found\"")
    println
"Response for airport/iata/foo: ${response}"
  }
  void testWithGoodIata(){
    def controller
= new AirportMappingController()
    controller.metaClass.getParams
= {->
      return [
"id":"den"]
    }
    controller.iata()
    def response
= controller.response.contentAsString
    assertTrue response.contains(
"Denver")
    println
"Response for airport/iata/den: ${response}"
  }
}

  输入 $grails test-app 运行测试。在 JUnit HTML 报告中应该可以看到成功信息,如图 2 所示。(要回顾 Grails 应用程序的测试,请参阅 “测试 Grails 应用程序”)。

  图 2. 在 JUnit 中测试通过  

  看看 清单 7 中的 testWithBadIata() 中发生了什么。第一行(显然)是创建 AirportMappingController 的一个实例。这是为了后面可以调用 controller.iata() 并针对产生的 JSON 写一个断言。要使调用失败(在此就是如此)或成功(在 testWithGoodIata() 中),需要用一个 id 项为 params hashmap 提供种子。通常,查询字符串被解析并存储到 params 中。但是,在这里,没有 HTTP 请求被解析。相反,我使用 Groovy 元编程直接覆盖 getParams 方法,使期望的值出现在返回的 HashMap 中。(要了解关于 Groovy 元编程的更多信息,请参阅 参考资料)。

  现在,JSON 产生器已经可以工作,并且经过了测试,接下来看看如何在一个 Web 页面中使用 JSON。

0
相关文章