2

何らかの理由で、この記事で説明されているフレックスユニットテストのaddAsyncチェーンは、実行しようとするとまったく機能しません。

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のバグだと思います...回避策はありますか?

4

1 に答える 1

2

さらに調査を行ったところ、これは実際には 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 のイベント キュー内のすべてが処理された後にオブジェクトの状態を検査しようとする試みに触発されました。sをいじることなくこれを達成する簡単な方法を発見しましたEventDispatcher

イベント キューを処理する場合は、テストの最初の部分の最後に次の呼び出しを行います。

Application.application.callLater(addAsync(phaseTwo, 1000, [引数...]), [null]);

phaseTwo次の署名を持つ関数を使用します。

private function phaseTwo(e:Event, args:Array):void

eオブジェクトが渡されnullます。これは、 との互換性を保つために必要addAsyncです。

于 2009-01-01T17:57:40.323 に答える