FlexUnit и callLater - PullRequest
       35

FlexUnit и callLater

0 голосов
/ 29 июня 2009

Я пытаюсь использовать callLater с FlexUnit v0.9:

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?

Ответы [ 3 ]

4 голосов
/ 29 июня 2009

Во-первых, вы действительно должны рассмотреть вопрос о переходе на FlexUnit 4.0: http://blogs.digitalprimates.net/codeSlinger/index.cfm/2009/5/3/FlexUnit-4-in-360-seconds

Во-вторых, callLater предназначен для того, чтобы задерживать обработку до следующего кадра в визуальных классах. Ваш тестовый класс не является визуальным классом, расширяющим UIComponent, поэтому вы не должны пытаться использовать callLater.

В-третьих, addAsync используется для проверки результатов асинхронной операции. Обычно это используется при тестировании результатов сетевого запроса, чтения файла, события таймера и т. Д. Вот почему обычно вы видите «событие» в качестве параметра в тестовой функции addAsync (поскольку асинхронные запросы используют результаты процесса). В вашем случае вы не отвечаете на асинхронную операцию с помощью вызова addAsync, и поэтому вам не следует искать событие в вашей тестовой функции. Удалите событие: параметр события, и ошибка исчезнет.

Однако, возможно, вы можете перефразировать этот вопрос, чтобы указать, чего вы пытаетесь достичь? Пример кода, который вы указали, на самом деле не делает ничего полезного. Если вы можете быть немного конкретнее, мы можем помочь вам написать лучший тестовый пример.

Для получения справки по использованию addAsync с более старыми версиями FlexUnit см. Этот учебник: http://life.neophi.com/danielr/2007/03/asynchronous_testing_with_flex.html

2 голосов
/ 25 июля 2010

На всякий случай, если кому-то это нужно, это работает:

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);
}
2 голосов
/ 29 июня 2009

Похоже, вы ожидаете событие, но не получаете его. Я полагаю, что следующий код будет работать.

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