第一次在这里询问。我切入正题。我正在尝试测试控制器的渲染视图,但我还没有找到任何明确的方法。特别是,我正在尝试的是测试渲染的.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]
我也尝试了哈基先生的方法,得到了同样的结果。你知道为什么会发生这种事吗?谢谢你抽出时间。