有谁知道最新版本的Grails(1.3.3)中controller.redirectArgs.action发生了什么?它曾经正常工作,但现在我使用它时会得到NPE。
class FooController {
def someRedirect = {
redirect(action:"bar")
}
}
class FooControllerTests extends grails.test.ControllerUnitTestCase {
void testSomeRedirect() {
controller.someRedirect()
assertEquals "bar", controller.redirectArgs.action
}
}
在这种情况下,controller.redirectArgs已经为空...
答案 0 :(得分:1)
将动作与字符串进行比较时遇到了同样的问题。以下是为我工作的地方
控制器看起来像:
class SomeObjectController {
def index = { redirect(action:list,params:params) }
def list = {
params.max = Math.min( params.max ? params.max.toInteger() : 10, 100)
[
someObjectInstanceList: someObject.list( params ),
somObjectInstanceTotal: someObject.count()
]
}
}
并且测试类看起来像:
class SomeObjectControllerTests extends ControllerUnitTestCase {
void testIndexRedirectToListAction(){
controller.index()
assertEquals controller.list, controller.redirectArgs.action
}
}
答案 1 :(得分:0)
好笑,我按照这里的文档:http://www.grails.org/Testing+Controllers
我打电话给: assertEquals“nextAvailable”,controller.redirectArgs.action我得到以下内容:
junit.framework.AssertionFailedError: junit.framework.AssertionFailedError: expected:<nextAvailable> but was:<com.***.***.XxxxXxxxController$_closure1@3da2cda9>
我似乎回到了关闭状态,我正在试图找出如何获取动作名称。
我在这里找到了解决方案:www.ibm.com/developerworks/java/library/j-grails10209/index.html?ca=drs -
如果你快速执行ctrl / cmd + F,你会发现这个断言通过了:
assertEquals controller.nextAvailable, controller.redirectArgs.action
这也过去了:
assertEquals controller.nextAvailable, controller.redirectArgs[action]