flexunit addAsync цепочка - PullRequest
       7

flexunit addAsync цепочка

2 голосов
/ 31 декабря 2008

По какой-то причине цепочка addAsync в тесте flexunit, как описано в этой статье , совершенно не работает, когда я пытаюсь это сделать.

public function testWhatever():void {
    var cont:EventDispatcher = new EventDispatcher();
    cont.addEventListener("continue", addAsync(verifyFirst, 1000));
    cont.dispatchEvent(new Event("continue"));
}

private function verifyFirst(e:Event):void {
    var cont:EventDispatcher = new EventDispatcher();
    cont.addEventListener("continue", addAsync(verifySecond, 1000));
    cont.dispatchEvent(new Event("continue"));
}

private function verifySecond(e:Event):void {
    assertTrue(true);
}

Если я запускаю этот тест, вызывается verifyFirst, но не verifySecond. Я предполагаю, что это ошибка в flexunit ... есть ли обходной путь?

1 Ответ

2 голосов
/ 01 января 2009

Я провел еще какое-то исследование и обнаружил, что это действительно ошибка в flexunit, которая в следующем выпуске будет исправлена ​​ Обходной путь, который я нашел, заключался в использовании Application.application.callLater для отправки второго события.

private function verifyFirst(e:Event):void {
    var cont:EventDispatcher = new EventDispatcher();
    cont.addEventListener("continue", addAsync(verifySecond, 1000));
    Application.application.callLater(cont.dispatchEvent,
       [new Event("continue")]);
}

Этот вопрос был вдохновлен попыткой проверить состояние объекта после того, как все в очереди событий Flash было обработано. Я обнаружил более простой способ сделать это, не связываясь с EventDispatcher s.

Выполните следующий вызов в конце первой части теста, если вы хотите, чтобы очередь событий была обработана.

Application.application.callLater(addAsync(phaseTwo, 1000, [ арг ... ]), [null]);

С функцией phaseTwo, имеющей следующую подпись.

private function phaseTwo(e:Event, args:Array):void

e будет передан объект null. Это необходимо для совместимости с addAsync.

...