Я использую это 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 не распознает мое событие.