По какой-то причине цепочка 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 ... есть ли обходной путь?





Я провел еще несколько исследований и обнаружил, что это действительно ошибка 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.
Сделайте следующий вызов в конце первой части теста, когда вы хотите, чтобы очередь событий обрабатывалась.
Application.application.callLater(addAsync(phaseTwo, 1000, [аргументы ...]), [null]);
С функцией phaseTwo, имеющей следующую подпись.
private function phaseTwo(e:Event, args:Array):void
e будет передан объект null. Это необходимо для совместимости с addAsync.