Гибкое устройство и callLater
-
21-08-2019 - |
Вопрос
Я пытаюсь использовать 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);
}