通过元类重写 grails 控制器链方法没有效果
考虑以下控制器:
package test
class FirstController
{
def index =
{
chain(controller:"second",
action: "index")
}
}
...具有以下关联的单元测试用例:
package test
import grails.test.*
class FirstControllerTests extends ControllerUnitTestCase
{
protected void setUp()
{
super.setUp()
}
protected void tearDown()
{
super.tearDown()
}
// Passes
void testChainArgs()
{
controller.index()
assertEquals('index', controller.chainArgs.action)
assertEquals('second', controller.chainArgs.controller)
}
// Fails
void testOverrideInstanceChain()
{
def passTest = false
controller.metaClass.chain =
{
Map args ->
passTest = true
}
assertTrue(passTest)
}
// Fails
void testOverrideClassChain()
{
def passTest = false
FirstController.metaClass.chain =
{
Map args ->
passTest = true
}
assertTrue(passTest)
}
}
为什么最后两个测试失败?
Consider the following controller:
package test
class FirstController
{
def index =
{
chain(controller:"second",
action: "index")
}
}
... with the following associated unit test case:
package test
import grails.test.*
class FirstControllerTests extends ControllerUnitTestCase
{
protected void setUp()
{
super.setUp()
}
protected void tearDown()
{
super.tearDown()
}
// Passes
void testChainArgs()
{
controller.index()
assertEquals('index', controller.chainArgs.action)
assertEquals('second', controller.chainArgs.controller)
}
// Fails
void testOverrideInstanceChain()
{
def passTest = false
controller.metaClass.chain =
{
Map args ->
passTest = true
}
assertTrue(passTest)
}
// Fails
void testOverrideClassChain()
{
def passTest = false
FirstController.metaClass.chain =
{
Map args ->
passTest = true
}
assertTrue(passTest)
}
}
Why are the last two tests failing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
很抱歉,您错过了对controller.index() 的调用。
在我用
和
所有测试通过测试你的代码之后。
I am sorry, but you miss the invocation to the controller.index().
After I test out your code with
and
All tests pass.