gpt4 book ai didi

unit-testing - 通过调用多个操作来单元测试 Controller

转载 作者:行者123 更新时间:2023-12-04 04:01:15 25 4
gpt4 key购买 nike

我遇到的问题与 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()

有点像,它让我可以调用另一个 Action ,但是它似乎撤消/回滚了前一个 Action 所做的更改,这正是我想要避免的(如果我想要的话,我会把调用放到它的自己的测试[方法])。

最佳答案

答案是

response.reset()

我不知道您为什么会收到该异常。顺便说一下,您应该创建一项任务一项测试。

我想你可以试试这个:

import org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest
.....

// set params so i can create an obj.
def results = controller.save()

def lastRequest = GrailsWebRequest.lookup().currentRequest
lastRequest.removeAttribute("org.codehaus.groovy.grails.REDIRECT_ISSUED")

// validate results or model/view
results = controller.edit(id, version)

关于unit-testing - 通过调用多个操作来单元测试 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12179013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com