Grails:使用Spock测试模板渲染

Grails:使用Spock测试模板渲染,grails,groovy,spock,Grails,Groovy,Spock,我使用Spock测试控制器的动作,如下所示: 控制器中的代码: def milestoneChange() { Milestones selectedMilestone = dataQueryService.getMilestone(params.id) Tasks[] tasksList = dataQueryService.getTasksList(params.id) List enumerateNameList = dataQueryService.getEnum

我使用Spock测试控制器的动作,如下所示:

控制器中的代码:

def milestoneChange() {
    Milestones selectedMilestone = dataQueryService.getMilestone(params.id)
    Tasks[] tasksList = dataQueryService.getTasksList(params.id)
    List enumerateNameList = dataQueryService.getEnumerateNameList()

    render(template: 'milestoneSummary', model: [selectedMilestone: selectedMilestone, tasksList: tasksList, enumerateNameList: enumerateNameList, selectedMilestoneID: params.id])
}
测试中的代码:

    @TestFor(MilestonesMgtController)
class MilestonesMgtControllerSpec extends Specification {
void "change the milestone"() {
    when:
    views['/milestonesMgt/_milestoneSummary.gsp'] = "test"
    controller.params.id = 'Late Stage Review'
    controller.milestoneChange()

    then:
    controller.response.text == 'test'
}
}

由于_milestoneSummary.gsp的内容非常长,我使用了Grails文档中提到的方法,即使用视图['/milestonesMgt/_milestoneSummary.gsp']模拟模板。但是,回复的内容还是原来的长?有人知道我的代码有什么问题吗?非常感谢

顺便说一句,当使用params/response/model时,我必须使用controller.xxx,但我看到文档中的示例代码直接使用params/response/model,您知道为什么吗

我正在使用Grails2.3.8

项目链接
测试位于MMS/test/integration/phdmilestonemanagementsystem/MilestonesMgtControllerSpec.gr中‌​oovy

这一切都如期进行。为安全起见,请清理一次应用程序,尽管这无关紧要。清理后不工作。我怀疑它没有捕获模板路径:/milestonesMgt/_milestoneSummary.gsp.groovyPages['/sample/_header.gsp']而不是视图[…]工作吗?正如文章中提到的?groovyPages不起作用,它应该是一个单元规范,而不是一个集成规范。只需将文件移动到test/unit并更改您所讨论的内容,使用视图[…],一切都会通过。-拇指打字。