Pregunta

Estoy tratando de utilizar callLater con v0.9 FlexUnit:

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

pero cuando se queda consigo este error:

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]

No estoy seguro de cuál es el problema. CallLater es incompatible con FlexUnit?

¿Fue útil?

Solución

En primer lugar, que realmente debería considerar la posibilidad de migrar a FlexUnit 4.0: http://blogs.digitalprimates.net/codeSlinger/index.cfm/2009/5/3/FlexUnit-4-in-360-seconds

Segundo, callLater está destinado a ser utilizado para retrasar el procesamiento hasta la siguiente trama en las clases visuales. La clase de caso de prueba no es una clase visual que se extiende UIComponent, por lo tanto, no se debe intentar utilizar callLater.

En tercer lugar, es addAsync utilizar para probar los resultados de una operación asíncrona. Esto se suele utilizar en las pruebas de los resultados de una solicitud de red, de una lectura de archivos, de un evento de temporizador, etc. Es por ello que normalmente se ve un "evento" como parámetro en la función de prueba addAsync (ya que las peticiones asincrónicas utilizan a eventos los resultados del proceso). En su caso, usted no está respondiendo a una operación asíncrona con su llamada addAsync, y por lo tanto no se debe buscar un evento en su función de prueba. Retire el evento:. Parámetro de evento y el error desaparecerá

Sin embargo, tal vez se puede reformular esta pregunta a afirmar lo que estás tratando de lograr? El ejemplo de código que has indicado no está haciendo nada útil. Si puede ser un poco más específico que puede ayudar a escribir un mejor caso de prueba.

Para obtener ayuda con el uso de addAsync con versiones anteriores de FlexUnit, ver este tutorial: http://life.neophi.com/danielr/2007/03/asynchronous_testing_with_flex.html

Otros consejos

Parece que usted está esperando un evento, pero no conseguir uno. Me imagino el siguiente código funcionaría.

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

Por si alguien lo necesita, esto funciona:

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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top