Вопрос

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

Это было полезно?

Решение

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

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

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

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

Для получения справки по использованию 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top