我正在使用这个AsyncHelper。我想创建基本的测试用例,我想从测试方法分派事件(通过 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 方法中。并将 flex EventDispatcher 调度事件返回。但我不知道为什么 SequenceWaiter 无法识别我的事件。