我正在尝试测试 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/