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() перед созданием последовательности. При изменении порядка вызова методов проблема исчезнет.

Другие вопросы по тегам