2009-06-29 1 views
0

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

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?

ответ

4

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

+0

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

+0

Бета-версия FlexUnit 4 также стабильна, если не больше, чем исходный код FlexUnit. Не позволяйте «все еще в бета-версии» дурачить вас. Первоначально FlexUnit даже не 1.0. Способ, которым вы используете addAsync, несовместим с callLater. Как я уже объяснял, addAsync предназначен для обработки событий, возникающих в результате асинхронных операций. Как правило, вы не хотите использовать callLater внутри своих тестовых случаев. Что вы пытаетесь проверить? Скорее всего, лучший способ написать тестовый пример. Давайте попробуем помочь вам в этом. – darronschall

+0

Не то, что FlexUnit4 нестабилен, его нет поддержки Ant. Если я не смогу использовать его в своем инструменте CI, это будет разблокировать сделку. Я тестирую классы классов, и я хочу установить currentState «позже» после выполнения некоторых тестов/действий. callLater, казалось, был лучшим способом. – paleozogt

2

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

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

Это не работает. Это дает ту же ошибку. – paleozogt

2

Только в случае, если кто-то это нужно, это работает:

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); 
}