Вопрос

По какой-то причине цепочка 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top