我在控制器中有以下功能
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>
出于某种原因,如果您没有明确设置响应状态,则从单元测试运行时,render将始终返回200.
另外,如果我实际上是从浏览器中调用它们,render202会返回错误,但render201和render203会正常工作。我不知道render204会做什么。
这里发生了什么?这是Grails的错误吗?
答案 0 :(得分:2)
尝试这样的事情:
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()}
答案 1 :(得分:1)
预期:其中201&GT;但是:&lt; 200&gt;意味着您尝试请求返回某些响应的操作。如果你想测试201需要void方法。