0

有谁知道最新版本的 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 已经为空...

4

2 回答 2

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
    }
}
于 2011-06-29T17:03:15.027 回答
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]
于 2010-12-30T10:46:53.430 回答