【问题标题】:Grails get view of controllerGrails 获取控制器视图
【发布时间】:2011-03-22 17:42:02
【问题描述】:

我正在尝试为控制器制作集成测试用例,我需要获取正在测试的控制器的视图名称。

我正在尝试这样做:

controller?.modelAndView?.getViewName()

但是modelAndView 对象为空。控制器对象不为 null 并通过其他测试。

知道为什么我的 modelAndView 为 null 吗?从我搜索的内容来看,这是获取控制器视图名称的方法。

感谢您的帮助。

【问题讨论】:

    标签: grails integration-testing


    【解决方案1】:

    在执行控制器操作方法后,我需要在集成测试中获取模型之前遇到过类似的问题,所以我所做的是我更改了控制器的渲染方法,以便能够获取地图传递给它以便能够获取模型。所以我在测试方法中有一个变量叫renderMap,然后在我做了

    Map renderMap
    
    registerMetaClass(MyController.class)
    MyController.metaClass.render = {Map m ->
      renderMap = m
    }
    ...
    // Instantiate controller
    // Call controller action
    

    然后我可以像这样访问我在模型中设置的一些对象:

    def someObject = renderMap.model.someObject
    

    所以你应该可以这样做:

    String view = renderMap.view
    

    在某些时候,您可能希望恢复控制器的元类。

    【讨论】:

    • 感谢 Maricel 的反馈。我认为这不是我的情况,因为控制器在另一个测试用例上运行良好。问题是我必须手动将 id 放在地图(参数)上以创建域类的新实例。它在过去版本的 Grails 上运行良好,但在 1.3.5 上无法运行。我将在这里发布我的解决方案。
    【解决方案2】:

    测试用例在旧版本的 Grails 上工作,但从 1.3.5 开始它不能工作,我必须添加行以将 record.id 添加到参数中,如下所示:

        void testUpdateSaveError(){
    
        recordWrongParams.each{key, value->
            controller.params.put(key,value)
        }
        controller.params.put("id", record.id)      
        controller.update()         
    
        assertEquals controllerPath + "/edit", controller?.modelAndView?.getViewName()      
    }
    

    之后它就开始工作了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 2012-09-07
      • 1970-01-01
      相关资源
      最近更新 更多