flexunit addAsync تسلسل
-
03-07-2019 - |
سؤال
لسبب ما، addAsync تسلسل في اختبار flexunit كما هو موضح في <لأ href = "http://www.adobe.com/cfusion/communityengine/index.cfm؟event=showDetails&postId=6882&productId=2&loc=en_US" يختلط = "نوفولو noreferrer"> هذه المقالة فشل تماما للعمل عندما أحاول القيام بذلك.
public function testWhatever():void {
var cont:EventDispatcher = new EventDispatcher();
cont.addEventListener("continue", addAsync(verifyFirst, 1000));
cont.dispatchEvent(new Event("continue"));
}
private function verifyFirst(e:Event):void {
var cont:EventDispatcher = new EventDispatcher();
cont.addEventListener("continue", addAsync(verifySecond, 1000));
cont.dispatchEvent(new Event("continue"));
}
private function verifySecond(e:Event):void {
assertTrue(true);
}
إذا قمت بتشغيل هذا الاختبار، verifyFirst يحصل على استدعاء لكن verifySecond لا. أفترض هذا هو خلل في flexunit ... هل هناك حل بديل؟
المحلول
وفعلت بعض مزيد من البحث وجدت أن هذا هو في الواقع خطأ في flexunit، الذي يتطلع إلى أن يكون <لأ href = "https://bugs.adobe.com/jira/browse/FXU-19" يختلط = "نوفولو noreferrer "> ثابتة في الإصدار التالي. وكان الحل وجدت بدلا من ذلك استخدام Application.application.callLater
لارسال الحدث الثاني.
private function verifyFirst(e:Event):void {
var cont:EventDispatcher = new EventDispatcher();
cont.addEventListener("continue", addAsync(verifySecond, 1000));
Application.application.callLater(cont.dispatchEvent,
[new Event("continue")]);
}
واستلهم هذا السؤال من طرف محاولة لتفقد حالة كائن بعد أن تم تجهيزها كل شيء في انتظار الحدث فلاش ل. اكتشفت أبسط طريقة لتحقيق ذلك من دون العبث مع EventDispatcher
s.
تأكد ما يلي استدعاء نهاية الجزء الأول من الاختبار عندما تريد قائمة انتظار الحدث لتتم معالجتها.
وApplication.application.callLater(addAsync(phaseTwo, 1000, [
<م> وسائط ... م> ]), [null]);
ومع وظيفة phaseTwo
وجود توقيع التالية.
وprivate function phaseTwo(e:Event, args:Array):void
وسيتم تمريرها e
كائن null
. وهذا أمر ضروري لتكون متوافقة مع addAsync
.