如何在Grails 3的集成测试案例中将渲染模板与控制器绑定

时间:2019-03-12 09:51:50

标签: grails grails3 grails-3.3

我已将Grails项目从2.5升级到3.3.9,在现有版本中,有一个用于控制器的集成测试用例,其中断言了控制器的渲染模板行为

ex:

class UserController {

    def list = {
        render(template: 'list', model: [userInstanceList:User.list(params)])
    }
}

使用grails 2.x的集成测试用例

class UserControllerSpec extends IntegrationSpec{

    UserController controller
    Map renderedMap

    public void setup() {
        controller = new UserController()

        UserController.metaClass.render = { Map map ->
            renderedMap = map
        }
    }

    public void cleanup() {

    }

    void "test user list"(){
        when:
        controller.list()

        then:
        renderedMap.template.equals('list')
        renderedMap.model.userInstanceList.size() > 0
    }
}

使用时可以看到绑定metaClass.render将帮助我们弄清楚模板的断言

但是随着Grails 3的变化,很多东西都发生了变化,所以现在我更新了测试用例,例如

@Integration(applicationClass = Application.class)
@Rollback
class UserControllerSpec extends Specification{
    @Autowired
    UserController controller
    Map renderedMap


   //Mock web request code or other logic


    public void setup() {

        UserController.metaClass.render = { Map map ->
            renderedMap = map
        }
    }

    public void cleanup() {

    }

    void "test user list"(){
        when:
        controller.list()

        then:
        renderedMap.template.equals('list')
        renderedMap.model.userInstanceList.size() > 0
    }
}

但是在这里,我在renderedMap中得到了空值。

这里有什么解决方法吗?还可以通过测试访问Flash消息吗?

谢谢

0 个答案:

没有答案