3
我有一个非常类似于this question中描述的问题。 (主要区别在于我使用的是Grails 2.1)。通过调用多个动作的单元测试控制器
基本上我想编写一个单元测试,不喜欢某事:
// set params so i can create an obj.
def results = controller.save()
// validate results or model/view
results = controller.edit(id, version)
然而,这是不行的,因为第一种方法操作(保存)所引发的重定向,第二个会太,这导致CannotRedirectException。 随着消息:
Cannot issue a redirect(..) here. A previous call to redirect(..) has already redirected the response.
此提出的解决方法(在不同的地方发现的)是:
redirectArgs.clear()
然而,这不起作用,因为自Grails的2,redirectArgs不存在,只有
response.redirectUr
哪些只能被读取,不能写入。
我也已经尝试过这些东西(以各种组合):
response.reset()
clearGrailsWebRequest()
bindGrailsWebRequest()
cleanupGrailsWeb()
controller.redirect([:])
controller.redirect(null)
controller = new OfferObjectController()
controller = mockController(OfferObjectController)
所有没有任何的运气。
我完全没有想法还有什么可以工作/帮助。 任何建议表示赞赏!
==== ====编辑
我忘了澄清,
response.reset()
样的作品,它让我调用另一个动作,但它似乎撤销/回滚所做的更改通过之前的行动,这正是我想要避免的(如果我想这样做,我会把这个调用放到它自己的测试中[方法])。
不错,你基本上是正确的,我没有解释,在我的问题,编辑它澄清。不管怎么说,还是要谢谢你! – NoUsername
好吧,我编辑了我的答案。我不测试,只是猜测。请告诉我,如果它的工作。 –
该死的,我几乎可以肯定,这将工作(从代码判断),但它产生了相同的结果作为response.reset(),这意味着它从controller.save()(添加一个对象实例)撤消,这至少是一个意想不到的行为。 感谢您的建议。 – NoUsername