flexunit addAsyncチェーン
-
03-07-2019 - |
質問
何らかの理由で、この記事を実行しようとすると、まったく機能しません。
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
を使用して2番目のイベントをディスパッチすることでした。
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、[
args ... ])、[null]);
次のシグネチャを持つ phaseTwo
関数を使用。
プライベート関数phaseTwo(e:Event、args:Array):void
e
には null
オブジェクトが渡されます。これは、 addAsync
との互換性を保つために必要です。
所属していません StackOverflow