【问题标题】:Overriding grails controller chain method via metaClass having no effect通过元类覆盖 grails 控制器链方法无效
【发布时间】:2011-11-12 14:38:45
【问题描述】:

考虑以下控制器:

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)
    }
}

为什么最后两个测试失败了?

【问题讨论】:

    标签: unit-testing grails controller metaclass


    【解决方案1】:

    很抱歉,您错过了对 controller.index() 的调用。

    在我测试你的代码之后

    void testOverrideInstanceChain()
    {
        def passTest = false
    
        controller.metaClass.chain =
        {
            Map args ->
    
            passTest = true
        }
        controller.index()
    
        assertTrue(passTest)
    }
    

    void testOverrideClassChain()
    {
        def passTest = false
    
        FirstController.metaClass.chain =
        {
            Map args ->
    
            passTest = true
        }
        controller.index()
        assertTrue(passTest)
    }
    

    所有测试都通过。

    【讨论】:

    • 对我说。在我的辩护中,我确实从一些我遇到这个问题的真实代码中提取了这个例子,包括对控制器操作的调用......
    猜你喜欢
    • 2011-07-16
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多