0

我正在使用这个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 无法识别我的事件。

4

1 回答 1

0

我现在知道哪里出了问题:这是因为我在创建序列之前调用了 dispatcher()。我改变调用方法的顺序问题消失了。

于 2011-07-09T09:47:52.550 回答