测试Grails 2.3.8中.gsp页面的呈现内容

  • 本文关键字:gsp Grails 测试 grails testing
  • 更新时间 :
  • 英文 :


第一次在这里询问。我切入正题。我正在尝试测试控制器的渲染视图,但我还没有找到任何明确的方法。特别是,我正在尝试的是测试渲染的.gsp的实际内容;即,如果所呈现的html页面包含项目列表(例如,如<ul><li>标签中的列表),或者该页面应该显示的任何其他内容。这可能吗?或者甚至是测试这种东西的有效方法?我试着做这样的事情:

控制器:

class ConnectedPairController {
    def show(int id) {
        //Some logic to populate collections and stuff
        render(view:"show.gsp", model:['pqc':cp.getPath(),
                           'connected':cp.getPage(), 
                           'instance':coll, 
                           'pagesCollection':colPages])
    }

测试:

@TestFor(ConnectedPairController)
    class ConnectedPairControllerSpec extends Specification {
        void "test show"() {    
        when:
            controller.show(4) //4 being the id of the content I want to display
        then:
            controller.response.text.contains "Some string or html tag the page should display"
        }
    }

但返回的文本为null。也许这是应该的,但有办法获得渲染的内容吗?

我在文档中发现的东西没有用(至少对我想做的事情没有用),因为IMHO只测试琐碎的东西,比如正在渲染的.gsp,或者变量的内容:

@TestFor(SimpleController)
class SimpleControllerSpec extends Specification {
    void 'test home'() {
    when:
    controller.home()
    then:
    view == '/simple/homePage'
    model.title == 'Hello World'
    }
}

我希望我已经足够清楚了。谢谢你抽出时间。

附言:我使用的是Grails 2.3.8。如果你需要任何其他与环境相关的信息,请告诉我。

在单元测试中没有完全呈现响应。呈现视图时response.text将始终为null。

单元测试的目的是测试一个单元并模拟它周围的一切。视图层在该单元之外。

如果您想测试视图,请尝试GroovyPageUnitTestMixin

Mr。Haki有一篇关于如何测试视图和模板的好文章,解释了如何测试它们。

@ColinHarrington谢谢你的回答,很抱歉延误。我在这些网站上尝试过它所说的内容,但无论我呈现什么视图(.gsp)(就像一个只呈现变量内容的简单页面),render方法总是返回null(甚至不是空字符串)。

控制器:

class TestingController {
    def index() {
        render view: "testing.gsp", model: [test:"Test String"]
    }
}

测试:

import grails.test.mixin.TestMixin
import grails.test.mixin.web.GroovyPageUnitTestMixin
import spock.lang.Specification

@TestMixin(GroovyPageUnitTestMixin)
class TestingControllerSpec extends Specification {
    def controller
    def setup() {
        controller = testFor(TestingController)
    }
    void "test something"() {
        when:
            controller.index()
        then:
            render (view:"/testing/testing.gsp", model:model) == "Test String"
    }
}

测试结果:

test something(webbluefinder.TestingControllerSpec)
 |
Condition not satisfied:
render (view:"/testing/testing.gsp", model:model) == "Test String"
|                                          |      |
null                                       |      false
                                       [test:Test String]

我也尝试了哈基先生的方法,得到了同样的结果。你知道为什么会发生这种事吗?谢谢你抽出时间。

最新更新