grails - 测试 Controller 响应时出错。回复未更新

标签 grails integration-testing

我正在尝试测试 Grails Controller 的行为。 Controller 使用 JSON 对象回答。下一个功能失败

void testEnable() {
    def controller = new UserController()
    controller.enable()
    assertEquals('{"errors":"No se puede completar la petición porque faltan parametros"}', controller.response.contentAsString)

    controller.params.enabled = "foo"
    controller.enable()
    assertEquals('{"errors":"No se puede completar la petición porque faltan parametros"}', controller.response.contentAsString)

    controller.params.enabled=true
    controller.params.id=2
    controller.enable()
    /* Next line fails */
    assertEquals('{"errors":"No se ha encontrado al usuario"}', controller.response.contentAsString)
}

我收到下一个错误:
null expected:<{"errors":"No se [ha encontrado al usuario]"}> but was:<{"errors":"No se [puede completar la petición porque faltan parametros]"}>

但是,如果我将测试分成两个函数,两个函数都通过 .
void testEnableGoodParameters() {
        def controller = new UserController()
        controller.params.enabled=true
        controller.params.id=2
        controller.enable()
        assertEquals('{"errors":"No se ha encontrado al usuario"}', controller.response.contentAsString)
    }

    void testEnableBadParameters() {
        def controller = new UserController()
        controller.enable()
        assertEquals('{"errors":"No se puede completar la petición porque faltan parametros"}', controller.response.contentAsString)

        controller.params.enabled = "foo"
        controller.enable()
        assertEquals('{"errors":"No se puede completar la petición porque faltan parametros"}', controller.response.contentAsString)
    }

所以,似乎 controller.response 没有被改变。有谁知道为什么会发生这种情况以及如何解决它?

最佳答案

一个 MockHttpServletResponse在创建 Controller 时注入(inject),而不是在每个 Controller 操作调用之前。

当您在一个测试中多次调用 Controller 方法时,所有调用都使用相同的注入(inject)响应。据我了解,render() 方法不会覆盖先前呈现的响应,而是附加到它 - 因此,在您的示例中,当您调用 enable()第三次,响应已经包含在先前调用中呈现的 json 对象。

此外,您的错误消息看起来不像是由第三个断言引发的,而是由第一个或第二个断言引发的。

关于grails - 测试 Controller 响应时出错。回复未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8212466/

相关文章:

grails - Grails-Batik.jar互动

ruby-on-rails - rails : How do I login a Devise user in an integration test?

java - org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException : Error applying layout : main

grails - 包装内的服务

select - Grails如何使用选择标记之类的复选框标记

javascript - 集成组件中的 Emberjs 链接到 href 测试

android - 机器人测试应该是独立的

php - Jenkins PHP 示例测试项目

mysql - 在实时测试网站上进行集成测试,测试套件完成后恢复数据

shell - GVM/Grails shell 脚本错误?