[英]unable to run a Grails integration test for webFlow 2.0.0
我正在使用Grails 2.0.3和webFlow 2.0.0。
我的控制器中有一個WebFlow定義,可以正常工作,但是我仍然想添加集成測試以方便將來的維護。
每當控制器嘗試向流范圍添加一些值時,我的測試中都會遇到以下異常:
ERROR org.codehaus.groovy.grails.webflow.engine.builder.ClosureInvokingAction - Exception occured invoking flow action: No such property: poInfo for class: org.springframework.webflow.core.collection.LocalAttributeMap
groovy.lang.MissingPropertyException: No such property: poInfo for class: org.springframework.webflow.core.collection.LocalAttributeMap
at com.psswm.inboundcal.ReceivingEventController$_closure1_closure6_closure12.doCall(ReceivingEventController.groovy:83)
at grails.test.WebFlowTestCase.signalEvent(WebFlowTestCase.groovy:143)
at com.psswm.inboundcal.ReceivingEventCreationFlowTests.testAddPoInfoMissingPiecesPallets(ReceivingEventCreationFlowTests.groovy:32)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:24)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at _GrailsTest_groovy$_run_closure4.doCall(_GrailsTest_groovy:290)
at _GrailsTest_groovy$_run_closure2.doCall(_GrailsTest_groovy:248)
at _GrailsTest_groovy$_run_closure1_closure21.doCall(_GrailsTest_groovy:195)
at _GrailsTest_groovy$_run_closure1.doCall(_GrailsTest_groovy:184)
at TestApp$_run_closure1.doCall(TestApp.groovy:82)
| Failure: testAddPoInfoMissingPiecesPallets(com.psswm.inboundcal.ReceivingEventCreationFlowTests)
| org.springframework.webflow.execution.ActionExecutionException: Exception thrown executing org.codehaus.groovy.grails.webflow.engine.builder.ClosureInvokingAction@3beff9ad in state 'addPO' of flow 'create' -- action execution attributes were 'map[[empty]]'
at grails.test.WebFlowTestCase.signalEvent(WebFlowTestCase.groovy:143)
at com.psswm.inboundcal.ReceivingEventCreationFlowTests.testAddPoInfoMissingPiecesPallets(ReceivingEventCreationFlowTests.groovy:32)
Caused by: groovy.lang.MissingPropertyException: No such property: poInfo for class: org.springframework.webflow.core.collection.LocalAttributeMap
at com.psswm.inboundcal.ReceivingEventController$_closure1_closure6_closure12.doCall(ReceivingEventController.groovy:83)
... 2 more
這是我要測試的My WebFlow代碼的一部分:
def createFlow = {
initialize {
action {
if (params.eventId) {
flow.receivingEventId = params.eventId as int
ReceivingEvent existingReceivingEvent = ReceivingEvent.get(flow.receivingEventId)
flow.receivingEvent = new ReceivingEvent(branch:existingReceivingEvent.branch)
}
}
on ("success").to "addPO"
}
addPO {
on("add") {
log.debug("addPO")
// Initialize flow objects
flow.poInfo = new PoInfo(params)
if (flow.receivingEvent == null) {
flow.receivingEvent = new ReceivingEvent()
}
// validate and populate poInfo object
boolean objectIsValid = flow.poInfo.validateAndPopulate()
if(!objectIsValid) {
if(!flow.poInfo.hasErrors()) {
flash.warning = 'poInfo.poNumber.unknown'
}
return error()
}
// add poInfo object to receivingEvent for additional processing/validation
String errorMessage = flow.receivingEvent.addPoInfo(flow.poInfo)
if(null != errorMessage) {
flash.warning = errorMessage
return error()
} else {
flow.poInfo = null
}
}.to("addPO")
........
這是我的集成測試:
class ReceivingEventCreationFlowTests extends WebFlowTestCase{
ReceivingEventController receivingEventController = new ReceivingEventController()
void testInitializeFlow() {
startFlow()
assertCurrentStateEquals "addPO"
}
void testAddPoInfoMissingPiecesPallets() {
println("Hola mundo")
startFlow()
assertCurrentStateEquals "addPO"
receivingEventController.params.poNumber = '63055024UI1063'
receivingEventController.params.pro = '3'
println "flow scope: " + getFlowScope().getClass()
println ("Hola again")
signalEvent('add')
assertTrue getFlowScope().poInfo.hasErrors()
assertCurrentStateEquals "addPO"
}
@Override
public Object getFlow() {
receivingEventController.createFlow
}
String getFlowId() { "create" }
}
有人對我在這里缺少什么有任何想法嗎? 還是webFlow 2.0.0和grails 2.0.3有任何已知的集成測試問題?
我正在遵循《 Grails in Action》(第9.4章:測試WebFlows)一書中的指導原則,但是我仍然遇到上述錯誤。
提前致謝,
豪爾赫·巴斯克斯(Jorge Vasquez)
《 Grails in Action》是一本非常好的書,但有些古老。 我建議您使用單元測試代替集成測試。 文檔幾乎不存在,但是您可以在grails源代碼中看到一個很好的示例:
您可以看到帶有輸入,輸出,子流等的Web流。(輸入和輸出是GIA書中較新的)
在示例Roeche使用對話范圍的情況下,可以改為使用流范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.