2009-06-29 17 views
0

私はのFlexUnit V0.9でcallLaterを使用しようとしている:のFlexUnitと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

まず、あなたが本当に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呼び出しでの非同期操作に応答していないので、テスト関数でイベントを探してはいけません。イベント:イベントパラメータを削除すると、エラーは消えます。

しかし、おそらくあなたはあなたが達成しようとしていることを述べるためにこの質問を再解釈できますか?あなたが指示したコードサンプルは、実際に何か役に立つものではありません。少し具体的であれば、より良いテストケースを書くのを手助けすることができます。 FlexUnitの以前のバージョンでaddAsyncを使用してのヘルプについて

、このチュートリアルを参照してください。http://life.neophi.com/danielr/2007/03/asynchronous_testing_with_flex.html

+0

最初に、FlexUnitはまだantでサポートされていないベータ版ですので、私はFU1に固執しています。第二に、質問を理解しやすくするために質問の文脈を削除しました。第3に、イベントパラメータを削除してもランタイムエラーは変更されません。 – paleozogt

+0

FlexUnit 4のベータ版は、元のFlexUnitコードと同じくらい安定しています。 「まだベータ版で」あなたをだまさせてはいけません。とにかく元のFlexUnitは1.0でさえありません。 addAsyncを使用する方法は、callLaterと互換性がありません。上で説明したように、addAsyncは、非同期操作の結果から発生するイベントを処理するためのものです。一般的に、テストケース内ではcallLaterを使用したくありません。 テストしようとしていますか?テストケースを書く方が良いでしょう。それを試してみましょう。 – darronschall

+0

FlexUnit4は安定しておらず、Antのサポートはありません。私がCIツールで使うことができないのであれば、それはディール・ブレーカーです。 私はビュークラスをテストしていますが、いくつかのテスト/アクションが実行された後にcurrentStateを「後で」設定したいと思います。 callLaterはそれについて最善の方法と思われました。 – paleozogt

2

イベントを期待しているようですが、イベントを取得していないようです。私は次のコードがうまくいくと思います。

public function testCallLater():void { 
    Application.application.callLater(addAsync(function(/*removed event declaration*/):void { 
     assertTrue(true); 
    }, 1000)); 
} 
+0

を。同じエラーが発生します。 – paleozogt

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); 
} 
関連する問題