FlexUnit と callLater
-
21-08-2019 - |
質問
FlexUnit v0.9 で callLater を使用しようとしています。
public function testCallLater():void {
Application.application.callLater( addAsync(function():void {
assertTrue(true);
}, 1000));
}
しかし、実行すると次のエラーが発生します。
ArgumentError: Error #1063: Argument count mismatch on flexunit.framework::AsyncTestHelper/handleEvent(). Expected 1, got 0.
at Function/http://adobe.com/AS3/2006/builtin::apply()
at mx.core::UIComponent/callLaterDispatcher2()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8628]
at mx.core::UIComponent/callLaterDispatcher()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8568]
何が問題なのか分かりません。callLater は FlexUnit と互換性がありませんか?
解決
まず、FlexUnit 4.0 への移行を真剣に検討する必要があります。 http://blogs.digitalprimates.net/codeSlinger/index.cfm/2009/5/3/FlexUnit-4-in-360-秒
2 番目に、callLater はビジュアル クラスの次のフレームまで処理を遅らせるために使用されます。テスト ケース クラスは UIComponent を拡張するビジュアル クラスではないため、callLater を使用しないでください。
3 番目に、addAsync は非同期操作の結果をテストするために使用されます。これは通常、ネットワーク要求、ファイル読み取り、タイマー イベントなどの結果をテストする際に使用されます。これが、通常、addAsync テスト関数のパラメーターとして「イベント」が表示される理由です (非同期リクエストは結果を処理するためにイベントを使用するため)。あなたの場合、addAsync 呼び出しで非同期操作に応答していないため、テスト関数でイベントを探す必要はありません。events:Event パラメータを削除すると、エラーは解消されます。
ただし、この質問を言い換えて、何を達成しようとしているのかを説明できますか?あなたが示したコードサンプルは実際には何も役に立ちません。もう少し具体的に教えていただければ、より良いテスト ケースを作成できるようお手伝いいたします。
古いバージョンの FlexUnit で addAsync を使用する方法については、次のチュートリアルを参照してください。 http://life.neophi.com/danielr/2007/03/asynchronous_testing_with_flex.html
他のヒント
に見えます。私は、次のコードは動作します想像します。
public function testCallLater():void {
Application.application.callLater( addAsync(function(/*removed event declaration*/):void {
assertTrue(true);
}, 1000));
}
誰かがそれを必要とするだけの場合には、この作品ます:
private function testCallLater():void {
Application.application.callLater(doCallLater, [ addAsync(funcUnderTest, 1000) ]);
}
private function doCallLater(testFunc:Function):void {
testFunc(null); // Dummy arg necessary because of addAsync expecting one arg
}
private function funcUnderTest(e:Object = null):void {
assertTrue(true);
}