SequenceWaiter не распознает мое событие
Я использую этот AsyncHelper. Я хотел бы создать базовый контрольный пример, в котором я хотел бы отправить событие из метода test (Parsley MessageDispatcher), перехватить это событие любым другим методом и отправить его обратно (с помощью flex EventDispatcher).
Это мой тестовый пример:
package flexUnitTests {
import flash.events.ErrorEvent;
import flash.events.Event;
import flash.events.EventDispatcher;
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;
public class TestEvent extends Event { static public const OK :String = "TestEvent.ok"; public function TestEvent(type:String) { super(type); } }
}
Я не знаю, где проблема. Если я сделал следы в коде, я вижу, что Parsley отправляет мое событие в метод passItOn. И согните EventDispatcher для отправки события назад. Но я не знаю, почему SequenceWaiter не распознает мое событие.
1 ответ
Теперь я вижу, где проблема: это потому, что я вызываю dispatcher() перед созданием последовательности. При изменении порядка вызова методов проблема исчезнет.