Проблема aysnc модуля Flex: ошибка: асинхронное событие получено не по порядку - PullRequest
0 голосов
/ 08 сентября 2011

Я пишу контрольные примеры для тестирования функции с помощью flexunit 4. Я использую метод aysnc. Но когда я добавляю два или более asyncHandlers к экземпляру. Я столкнулся с проблемой: Ошибка: Асинхронное событие получено не по порядку. Как решить эту проблему? Спасибо.

Фрагменты кода:

[Test(order=1, async, description="synchronize content on line")]
    public function  testSynchronizeContentOnline():void
    {
        var passThroughData:Object = new Object();

        var asyncHandler1:Function = Async.asyncHandler(this, authFailureHandler, 60000, null, timeoutHandler);
        var asyncHandler:Function = Async.asyncHandler(this, authSuccessHandler, 60000, null, timeoutHandler);

        caseManager.addEventListener(CaseAuthEvent.AUTH_SUCCESS, 
            asyncHandler);

        caseManager.addEventListener(CaseAuthEvent.AUTH_FAILURE, 
            asyncHandler1);
        caseManager.authenticate("admin", "admin");

        trace('test');
    }

    private function timeoutHandler(event:Event):void 
    {
        Assert.fail( "Timeout reached before event");
    }

    private var authFailed:Boolean = false;
    private function authFailureHandler(event:CaseAuthEvent, passThroughData:Object):void
    {
        trace("authFailure:" + event.type);
        authFailed = true;

    }

    private var authSucceed:Boolean = false;
    private function authSuccessHandler(event:CaseAuthEvent, passThroughData:Object):void
    {
        trace("authSucceed:" + event.type);
        authSucceed = true;
        Assert.assertTrue(true);

    }

Ответы [ 2 ]

0 голосов
/ 14 декабря 2011

Ваш тест будет работать, если вы тестируете успех и терпите неудачу отдельно. Таким образом, в основном есть 2 теста, один добавляет асинхронный обработчик для успешности ваших событий, другой для неудачных. Вот пример 2-х тестов, как я бы подошел к ним ...

[Test(async)]
public function  testEventSuccess():void
{
    var passThroughData:Object = new Object();

    var asyncHandler:Function = Async.asyncHandler(this, authSuccessHandler, 60000, null, timeoutHandler);

    caseManager.addEventListener(CaseAuthEvent.AUTH_SUCCESS, 
        asyncHandler);

    caseManager.authenticate("admin", "admin");
}

[Test(async)]
public function  testEventFailure():void
{
    var passThroughData:Object = new Object();

    var asyncHandler:Function = Async.asyncHandler(this, authFailureHandler, 60000, null, timeoutHandler);

    caseManager.addEventListener(CaseAuthEvent.AUTH_FAILURE, 
        asyncHandler);
    caseManager.authenticate("admin", "admin");
}

Не забудьте создать новый экземпляр вашего caseManager в вашей функции настройки и рекомендуется удалить ссылку на него в tearDown, как показывает простой фрагмент кода, я только что предположил, что caseManager имеет тип CaseManager. *

[Before]
public function setUp():void
{
    caseManager = new CaseManager();
}

[After]
public function tearDown():void
{
    caseManager = null;
}
0 голосов
/ 08 сентября 2011

Это может быть связано с тем, что вы добавляете порядок в свои тестовые примеры, которые, по-видимому, отправляются еще до завершения первого.Процитируем часть заказа вики-модуля flex unit:

Ваши тесты должны действовать независимо друг от друга, поэтому смысл упорядочивания ваших тестов не должен гарантировать, что тест А настроеннекоторое состояние, в котором нуждается тест B.Если по этой причине вы читаете этот раздел, пожалуйста, пересмотрите.Тесты должны быть независимы друг от друга и в целом не зависеть от порядка.

С чем я полностью согласен. не должно быть в ваших тестах.Сами тесты задают состояние того, что должно быть сделано.

...