SequenceWaiter не распознает мое событие - PullRequest
0 голосов
/ 07 июля 2011

Я использую это AsyncHelper . Я хотел бы создать базовый контрольный пример, в котором я хотел бы отправить событие из метода test (Parsley MessageDispatcher), перехватить это событие любым другим методом и отправить его обратно (с помощью flex EventDispatcher).

Это мой тестовый пример: package flexUnitTests { import flash.events.ErrorEvent; import flash.events.Event; import flash.events.EventDispatcher;</p> <pre><code>import flexUnitTests.events.TestEvent; import flexUnitTests.helpers.AsyncHelper; import mx.logging.Log; import mx.logging.LogEventLevel; import mx.logging.targets.TraceTarget; import org.flexunit.assertThat; import org.hamcrest.object.equalTo; import org.spicefactory.parsley.core.context.Context; import org.spicefactory.parsley.core.messaging.MessageProcessor; import org.spicefactory.parsley.dsl.context.ContextBuilder; import org.spicefactory.parsley.flex.FlexConfig; import org.spicefactory.parsley.flex.FlexContextBuilder; public class HelloTest extends AsyncHelper { [MessageDispatcher] public var dispatcher:Function; [Inject] public var context:Context; public var eventDispatcher:EventDispatcher; [Before] public function initializeContext():void { // Use ContextBuilder to build context var context:Context = ContextBuilder.newSetup() .newBuilder() .config(FlexConfig.forClass(ParsleyConfig)) .build(); // Add this test case to context context.addDynamicObject(this); eventDispatcher = new EventDispatcher(); } [After] public function destroyContext():void { eventDispatcher = null; } [MessageHandler(selector='TestEvent.ok')] public function passItOn(event:TestEvent):void { eventDispatcher.dispatchEvent(event); } [Test(async)] public function tryIt():void { dispatcher(new TestEvent(TestEvent.OK)); waitFor(eventDispatcher, TestEvent.OK, 2000); thenAssert(function(event:TestEvent, data:*):void { assertThat(event.type, equalTo('TestEvent.ok')); }); } }

}

И мое событие выглядит так: package flexUnitTests.events { import flash.events.Event;</p> <pre><code>public class TestEvent extends Event { static public const OK :String = "TestEvent.ok"; public function TestEvent(type:String) { super(type); } }

}

Я не знаю, где проблема. Если я сделал следы в коде, я вижу, что Parsley отправляет мое событие в метод passItOn. И согните EventDispatcher для отправки события назад. Но я не знаю, почему SequenceWaiter не распознает мое событие.

1 Ответ

0 голосов
/ 09 июля 2011

Я вижу, где проблема сейчас: Это потому, что я вызываю dispatcher () перед созданием последовательности. При изменении порядка вызова методов проблема исчезнет.

...