Flexunit addAsync Verkettungs
-
03-07-2019 - |
Frage
Aus irgendeinem Grund Verkettungs addAsync in einem Flexunit-Tests wie in dieser Artikel absolut nicht funktioniert, wenn ich versuche, es zu tun.
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);
}
Wenn ich diesen Test ausführen, wird verifyFirst genannt, aber verifySecond nicht. Ich gehe davon aus das ein Fehler in Flexunit ist ... ist es eine Abhilfe?
Lösung
Ich habe einige mehr Forschung und festgestellt, dass dies in der Tat ein Problem bei Flexunit, die Fest in der nächsten Version. Die Abhilfe, die ich war gefunden stattdessen Application.application.callLater
zu verwenden, um das zweite Ereignis zu versenden.
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")]);
}
Diese Frage wurde von einem Versuch, inspirierte den Zustand eines Objekts nach allem, was in Flashs Ereigniswarteschlange verarbeitet worden zu inspizieren. Ich entdeckte einen einfacheren Weg, dies mit EventDispatcher
s ohne Unordnung zu erreichen.
Machen Sie die folgenden nennen das Ende des ersten Teils des Tests, wenn Sie die Ereigniswarteschlange wollen verarbeitet werden.
Application.application.callLater(addAsync(phaseTwo, 1000, [
args ... ]), [null]);
Mit der phaseTwo
Funktion die folgenden Signatur hat.
private function phaseTwo(e:Event, args:Array):void
e
ein null
Objekt übergeben werden. Dies ist notwendig, mit addAsync
kompatibel zu sein.