测试Web Flows需要一个特殊的测试工具grails.test.WebFlowTestCase,它继承Spring Web Flow的AbstractFlowExecutionTests 类。
WebFlowTestCase子类必须是集成测试实例
例如在下面的这个小flow情况下:class ExampleController {
def exampleFlow = {
start {
on("go") {
flow.hello = "world"
}.to "next"
}
next {
on("back").to "start"
on("go").to "end"
}
end()
}
}
接着你需要让测试工具知道使用什么样的flow定义。
通过重载getFlow抽象方法可以实现:class ExampleFlowTests extends grails.test.WebFlowTestCase {
def getFlow() { new ExampleController().exampleFlow }
…
}
假如你需要指定一个flow标识,你可以通过重载getFlowId方法实现,同时默认情况下是一个测试实例:class ExampleFlowTests extends grails.test.WebFlowTestCase {
String getFlowId() { "example" }
…
}
一旦这在你的测试实例里实现了,你需要用startFlow方法开始启动这个flow,这个方法会返回ViewSelection对象:void testExampleFlow() {
def viewSelection = startFlow()
assertEquals "start", viewSelection.viewName
…
}
如上所示,你可以通过使用ViewSelection对象的viewName属性,检查你是否是正确的。
触发事件你需要使用signalEvent 方法:void testExampleFlow() {
…
viewSelection = signalEvent("go")
assertEquals "next", viewSelection.viewName
assertEquals "world", viewSelection.model.hello
}
这里我们可以给flow发送信号执行go事件,这导致了到next状态的转变。
在上面的这个例子中转变的结果把一个hello变量放进flow范围。
我们可以检查如上ViewSelection的model属性测试这个变量的值。