Domanda

Sto cercando di utilizzare callLater con FlexUnit v0.9:

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

, ma quando viene eseguito ottengo questo errore:

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]

Non sono sicuro di quale sia il problema. È callLater incompatibile con FlexUnit?

È stato utile?

Soluzione

In primo luogo, si dovrebbe davvero prendere in considerazione la migrazione a FlexUnit 4.0: http://blogs.digitalprimates.net/codeSlinger/index.cfm/2009/5/3/FlexUnit-4-in-360-seconds

Secondo, callLater è destinato ad essere utilizzato per ritardare l'elaborazione fino fotogramma successivo nella classi visive. La classe test case non è una classe visiva che si estende UIComponent, pertanto, non si dovrebbe cercare di utilizzare callLater.

Terzo, addAsync è utilizzato per testare i risultati di un'operazione asincrona. Questo è in genere utilizzato in fase di test i risultati di una richiesta di rete, di un file di lettura, di un evento timer, ecc Questo è il motivo per cui di solito si vede un "evento" come parametro nella funzione di test addAsync (perché richieste asincrone utilizzare gli eventi per risultati di processo). Nel tuo caso, non si sta rispondendo a un'operazione asincrona con la chiamata addAsync, e, pertanto, non si dovrebbe essere alla ricerca di un evento nella vostra funzione di test. Rimuovere l'evento:. Parametro di evento e l'errore andrà via

Tuttavia, forse è possibile ri-frase questa domanda di affermare ciò che si sta cercando di realizzare? L'esempio di codice che hai indicato non è davvero facendo qualcosa di utile. Se si può essere un po 'più specifico siamo in grado di aiutare a scrivere una migliore banco di prova.

Per informazioni utilizzando addAsync con versioni precedenti di FlexUnit, si veda questo tutorial: http://life.neophi.com/danielr/2007/03/asynchronous_testing_with_flex.html

Altri suggerimenti

Sembra che ci si aspetta un evento, ma non ottenere uno. Immagino il seguente codice avrebbe funzionato.

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

Nel caso in cui qualcuno ha bisogno, questo funziona:

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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top