第一次问这里。我会切入正确的追逐。我试图测试控制器的渲染视图,但我还没有找到任何明确的方法来做到这一点。特别是,我试图做的是测试.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。也许这就是它应该如何,但有没有办法获得渲染内容?
我在文档中找到的内容没有用(至少不是我想要做的),因为恕我直言,它只测试琐碎的东西,比如正在呈现的.gsp,或变量的内容:
@TestFor(SimpleController)
class SimpleControllerSpec extends Specification {
void 'test home'() {
when:
controller.home()
then:
view == '/simple/homePage'
model.title == 'Hello World'
}
}
我希望我足够清楚。谢谢你的时间。
PS:我使用的是Grails 2.3.8。如果您需要与环境有关的任何其他信息,请告知我们。
答案 0 :(得分:0)
单元测试中未完全呈现响应。 response.text will always be null when rendering views.
单元测试的目的是测试一个单元并模拟其周围的一切。视图层位于该单元之外。
如果您想测试视图,请尝试GroovyPageUnitTestMixin
先生。 Haki有good post on how to test views and templates解释如何测试它们。
答案 1 :(得分:0)
@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]
我也尝试过Haki先生的方法,并得到了相同的结果。 你碰巧知道为什么会这样吗?谢谢你的时间。