【问题标题】:How do you unit test the response status of a Grails controller?如何对 Grails 控制器的响应状态进行单元测试?
【发布时间】:2010-12-07 02:14:48
【问题描述】:

我在控制器中有以下功能

def render201 = {
    render(status:201)
}

def render202 = {
    response.setStatus(202)
}

def render203 = {
    response.setStatus(203)
    render(status:203)
}

def render204 = {
    response.setStatus(204)
    render(status:205)
}

我有以下测试

void test201() {
    controller.render201()
    assertEquals(201, controller.response.status)
}

void test202() {
    controller.render202()
    assertEquals(202, controller.response.status)
}

void test203() {
    controller.render203()
    assertEquals(203, controller.response.status)
}

void test204() {
    controller.render204()
    assertEquals(204, controller.response.status)
}

test201 失败并显示此消息

junit.framework.AssertionFailedError: expected:<201> but was:<200>

由于某种原因,如果您没有显式设置响应状态,则在从单元测试运行时,渲染将始终返回 200。

另外,如果我真的从浏览器调用这些,render202 会返回一个错误,但render201 和render203 会正常工作。我不知道render204会做什么。

这里发生了什么?这是 Grails 中的错误吗?

【问题讨论】:

    标签: unit-testing render grails-controller


    【解决方案1】:

    试试这样的:

    assertEquals(201, controller.renderArgs.status)
    

    它对我有用。

    如果你想了解 mockController 的内部,请看: https://svn.codehaus.org/grails/trunk/grails/src/groovy/grails/test/MockUtils.groovy

    clazz.metaClass.getForwardArgs = {-> fwdArgs}
    clazz.metaClass.getRedirectArgs ={-> redArgs}
    clazz.metaClass.getRenderArgs ={-> renArgs}
    clazz.metaClass.forward = {Map map -> forwardArgs.putAll(map)}
    clazz.metaClass.redirect = {Map map -> redirectArgs.putAll(map)}
    clazz.metaClass.render = {String text -> delegate.response.writer << text}
    clazz.metaClass.render = {Converter arg -> delegate.response.writer << arg.toString()}
    

    【讨论】:

    • 在 Grails 2.2+ 中,你可以只使用 response.status,前提是你正确使用了 @TestFor 注释。
    【解决方案2】:

    expected: but was: 表示您尝试请求返回一些响应的操作。如果要测试201需要void方法。

    【讨论】:

      猜你喜欢
      • 2012-04-24
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多