Question

Je suis en train d'utiliser callLater avec FlexUnit v0.9:

public function testCallLater():void {
   Application.application.callLater( addAsync(function():void {
      assertTrue(true);
   }, 1000));
}

mais quand il fonctionne, je reçois cette erreur:

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]

Je ne sais pas quel est le problème. Est-callLater incompatible avec FlexUnit?

Était-ce utile?

La solution

D'abord, vous devriez vraiment envisager la migration vers 4.0 FlexUnit: http://blogs.digitalprimates.net/codeSlinger/index.cfm/2009/5/3/FlexUnit-4-in-360-seconds

En second lieu, callLater est destiné à être utilisé pour retarder le traitement jusqu'à ce que la trame suivante dans les classes visuelles. Votre classe de cas de test n'est pas une classe visuelle extension UIComponent, par conséquent, vous ne devriez pas essayer d'utiliser callLater.

Troisièmement, addAsync est utiliser pour tester les résultats d'une opération asynchrone. Ceci est généralement utilisé pour tester les résultats d'une requête réseau, d'une lecture de fichier, d'un événement de minuterie, etc. C'est pourquoi normalement vous voyez un « événement » comme paramètre dans la fonction de test addAsync (car les requêtes asynchrones utiliser des événements pour les résultats du procédé). Dans votre cas, vous ne répondez pas à une opération asynchrone avec votre appel addAsync, et donc vous ne devriez pas être à la recherche d'un événement dans votre fonction de test. Retirez l'événement. Paramètre de l'événement et l'erreur disparaîtra

Cependant, vous pouvez peut-être reformuler cette question de dire ce que vous essayez d'accomplir? L'exemple de code que vous avez indiqué ne fait pas vraiment quelque chose d'utile. Si vous pouvez nous être un peu plus précis peut vous aider à écrire un meilleur scénario de test.

Pour de l'aide à l'utilisation addAsync avec les anciennes versions de FlexUnit, consultez ce tutoriel: http://life.neophi.com/danielr/2007/03/asynchronous_testing_with_flex.html

Autres conseils

On dirait que vous attendez d'un événement, mais pas obtenir un. Je suppose que le code suivant fonctionnerait.

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

Juste au cas où quelqu'un en a besoin, cela fonctionne:

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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top