簡體   English   中英

如何對Grails控制器的響應狀態進行單元測試?

[英]How do you unit test the response status of a Grails controller?

我在控制器中具有以下功能

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中的錯誤嗎?

嘗試這樣的事情:

assertEquals(201, controller.renderArgs.status)

它為我工作。

如果您想了解模擬控制器的內部,請查看: 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()}

預期:<201>,但預期:<200>表示您嘗試請求返回一些響應的操作。 如果要測試201,則需要void方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM