0

FlexUnitv0.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と互換性がありませんか?

4

3 に答える 3

4

まず、FlexUnit 4.0への移行を検討する必要があります:http://blogs.digitalprimates.net/codeSlinger/index.cfm/2009/5/3/FlexUnit-4-in-360-seconds

次に、callLaterは、ビジュアルクラスの次のフレームまで処理を遅らせるために使用されます。テストケースクラスはUIComponentを拡張するビジュアルクラスではないため、callLaterを使用しないでください。

第3に、addAsyncは、非同期操作の結果をテストするために使用されます。これは通常、ネットワークリクエスト、ファイル読み取り、タイマーイベントなどの結果をテストする際に使用されます。そのため、通常、addAsyncテスト関数のパラメーターとして「イベント」が表示されます(非同期リクエストはイベントを使用してプロセス結果)。あなたの場合、addAsync呼び出しで非同期操作に応答していないため、テスト関数でイベントを探すべきではありません。event:Eventパラメーターを削除すると、エラーはなくなります。

しかし、おそらくあなたはこの質問を言い換えて、あなたが達成しようとしていることを述べることができますか?あなたが示したコードサンプルは、実際には何の役にも立ちません。もう少し具体的にすることができれば、より良いテストケースを書くお手伝いをすることができます。

古いバージョンのFlexUnitでaddAsyncを使用する際のヘルプについては、次のチュートリアルを参照してください:http: //life.neophi.com/danielr/2007/03/asynchronous_testing_with_flex.html

于 2009-06-29T15:44:16.673 に答える
2

イベントを期待しているようですが、イベントを取得していません。次のコードが機能すると思います。

public function testCallLater():void {
   Application.application.callLater( addAsync(function(/*removed event declaration*/):void {
      assertTrue(true);
   }, 1000));
}
于 2009-06-29T15:40:09.943 に答える
2

誰かがそれを必要とする場合に備えて、これは機能します:

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);
}
于 2010-07-25T11:59:29.900 に答える