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, chapter 9.4: Testing WebFlows... それでも、上記のエラーが発生し続けます。
前もって感謝します、
ホルヘ・バスケス