Grails 1.1 测试Web Flows

测试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属性测试这个变量的值。