FlexUnit и callLater

Я пытаюсь использовать 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 ответа

Решение

Во-первых, вам следует подумать о переходе на 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

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

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

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

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);
}
Другие вопросы по тегам