質問

何らかの理由で、この記事を実行しようとすると、まったく機能しません。

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 との互換性を保つために必要です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top