【问题标题】:How to test (unit test) methods in Spock which involve rendering a view?如何在 Spock 中测试(单元测试)涉及渲染视图的方法?
【发布时间】:2015-09-03 05:46:21
【问题描述】:

首先,我没有尝试过 JUnit 或任何其他测试框架,所以我希望你明白我在问这种问题。

我是 spock 的新手(正如我已经提到的,我在测试框架方面没有任何背景)并且我在 grails 中创建了一个简单的应用程序。现在我想创建一个代码(单元测试)来测试我使用 spock 制作的应用程序(希望你明白我的意思)。

我已经阅读了几篇关于 spock 的文章,但我仍然不太了解如何在我自己的应用中做到这一点。

class DailyProfitController {
     def update() {
        params.date_month = (Integer.parseInt(params.date_month)<10)? "0" + params.date_month : params.date_month
        params.date_day = (Integer.parseInt(params.date_day)<10)? "0" + params.date_day : params.date_day
        params.date = params.date_year + "-" + params.date_month + "-" + params.date_day
        def dailyProfit = new DailyProfit(params)
        dailyProfit.save(flush:true, insert:false)
        list()    
    }


def list(){
    def dailyProfit = DailyProfit.list()
    render view:"profitTable",  model: [dailyProfit : dailyProfit]
}

}

上面显示的是控制器和两个方法,更新和列表。假设我想使用 spock 为这个控制器创建单元测试代码,我该怎么做?

【问题讨论】:

标签: unit-testing grails spock


【解决方案1】:

如果您对控制器进行单元测试,我会根据单元测试应该验证控制器是否以正确的参数提供正确的数据这一事实进行测试。

查看模拟视图(本质上,构建提供给视图的数据的字符串表示形式,并将其与控制器的响应文本进行比较。下面是非常简短的简单示例:

setup:
def desired = "configurationId: 5, categoryId: 2"

when:
// have to escape the value insertion ${}
def mockView = "configurationId: \${configurationId}, categoryId: \${categoryId}"
// then substitute our stringification mockView for the real gsp
views['/generalSettings/_generalSettings.gsp'] = mockView

controller.index()

then:
response.text == desired

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多