Frage

Ich versuche, calllater mit Flexunit v0.9 zu verwenden:

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

aber wenn es läuft ich diesen Fehler:

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]

Ich bin mir nicht sicher, was das Problem ist. Ist calllater unvereinbar mit Flexunit?

War es hilfreich?

Lösung

Als erstes sollten Sie wirklich in Betracht ziehen zu Flexunit 4.0 migrieren: http://blogs.digitalprimates.net/codeSlinger/index.cfm/2009/5/3/FlexUnit-4-in-360-seconds

Zweitens wird calllater gemeint, bis das nächste Bild in der visuellen Klassen zu verzögern Verarbeitung verwendet werden. Ihre Testfall-Klasse ist nicht eine visuelle Klasse UIComponent erweitern, deshalb sollten Sie nicht versuchen, calllater zu verwenden.

Drittens ist addAsync verwenden, um die Ergebnisse eines asynchronen Betrieb zu testen. Dies wird in der Regel bei der Prüfung der Ergebnisse einer Netzwerkanfrag, eine Datei zu lesen, ein Timer-Ereignis verwendet, usw. Aus diesem Grunde normalerweise Sie ein „Ereignis“ als Parameter in der addAsync Testfunktion sehen (da asynchrone Anforderungen Ereignisse verwenden, um Prozessergebnisse). In Ihrem Fall sind reagieren Sie nicht auf einen asynchronen Betrieb mit Ihrem addAsync Anruf, und deshalb sollten Sie nicht für eine Veranstaltung in Ihrer Testfunktion suchen werden. Entfernen Sie das Ereignis. Ereignisparameter und der Fehler weggeht

Aber vielleicht können Sie diese Frage erneut Ausdruck zu sagen, was Sie erreichen wollen? Das Codebeispiel, das Sie angegeben haben tut nicht wirklich etwas nützlich. Wenn Sie ein wenig genauer sein können wir Ihnen einen besseren Testfall helfen schreiben.

Wenn Sie Hilfe bei der Verwendung von addAsync mit älteren Versionen von Flexunit finden Sie in diesem Tutorial: http://life.neophi.com/danielr/2007/03/asynchronous_testing_with_flex.html

Andere Tipps

Es sieht aus wie Sie ein Ereignis erwarten, aber nicht machtlos. Ich stelle mir die folgenden Code funktionieren würde.

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

Nur für den Fall, dass jemand braucht es, das funktioniert:

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top