Проблема aysnc модуля Flex: ошибка: асинхронное событие получено не по порядку
Я пишу контрольные примеры для тестирования функции с помощью flexunit 4. Я использую метод aysnc. Но когда я добавляю два или более asyncHandlers к экземпляру. Я столкнулся с проблемой: Ошибка: Асинхронное событие получено не в порядке. Как решить эту проблему? Благодарю.
Фрагменты кода:
[Test(order=1, async, description="synchronize content on line")]
public function testSynchronizeContentOnline():void
{
var passThroughData:Object = new Object();
var asyncHandler1:Function = Async.asyncHandler(this, authFailureHandler, 60000, null, timeoutHandler);
var asyncHandler:Function = Async.asyncHandler(this, authSuccessHandler, 60000, null, timeoutHandler);
caseManager.addEventListener(CaseAuthEvent.AUTH_SUCCESS,
asyncHandler);
caseManager.addEventListener(CaseAuthEvent.AUTH_FAILURE,
asyncHandler1);
caseManager.authenticate("admin", "admin");
trace('test');
}
private function timeoutHandler(event:Event):void
{
Assert.fail( "Timeout reached before event");
}
private var authFailed:Boolean = false;
private function authFailureHandler(event:CaseAuthEvent, passThroughData:Object):void
{
trace("authFailure:" + event.type);
authFailed = true;
}
private var authSucceed:Boolean = false;
private function authSuccessHandler(event:CaseAuthEvent, passThroughData:Object):void
{
trace("authSucceed:" + event.type);
authSucceed = true;
Assert.assertTrue(true);
}
2 ответа
Ваш тест будет работать, если вы тестируете успех и терпите неудачу отдельно. Таким образом, в основном есть 2 теста, один добавляет асинхронный обработчик для успешности ваших событий, другой для неудачных событий. Вот пример 2 тестов, как я хотел бы подойти к ним...
[Test(async)]
public function testEventSuccess():void
{
var passThroughData:Object = new Object();
var asyncHandler:Function = Async.asyncHandler(this, authSuccessHandler, 60000, null, timeoutHandler);
caseManager.addEventListener(CaseAuthEvent.AUTH_SUCCESS,
asyncHandler);
caseManager.authenticate("admin", "admin");
}
[Test(async)]
public function testEventFailure():void
{
var passThroughData:Object = new Object();
var asyncHandler:Function = Async.asyncHandler(this, authFailureHandler, 60000, null, timeoutHandler);
caseManager.addEventListener(CaseAuthEvent.AUTH_FAILURE,
asyncHandler);
caseManager.authenticate("admin", "admin");
}
Не забудьте создать новый экземпляр вашего caseManager в вашей функции настройки и рекомендуется удалить ссылку на него в tearDown, как показывает простой фрагмент кода, я только что предположил, что caseManager имеет тип CaseManager.
[Before]
public function setUp():void
{
caseManager = new CaseManager();
}
[After]
public function tearDown():void
{
caseManager = null;
}
Это может быть связано с тем, что вы добавляете порядок в свои тестовые примеры, которые, по-видимому, отправляются еще до завершения первого. Чтобы процитировать часть заказа вики-модуля flex:
Ваши тесты должны действовать независимо друг от друга, поэтому смысл упорядочивания ваших тестов не должен гарантировать, что тест A устанавливает какое-то состояние, в котором нуждается тест B. Если по этой причине вы читаете этот раздел, пожалуйста, пересмотрите. Тесты должны быть независимы друг от друга и, как правило, не зависят от порядка.
С чем я полностью согласен. Там не должно быть никакого порядка в ваших тестах. Сами тесты задают состояние того, что необходимо сделать.