سؤال

لسبب ما، 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")]);
}

واستلهم هذا السؤال من طرف محاولة لتفقد حالة كائن بعد أن تم تجهيزها كل شيء في انتظار الحدث فلاش ل. اكتشفت أبسط طريقة لتحقيق ذلك من دون العبث مع EventDispatchers.

تأكد ما يلي استدعاء نهاية الجزء الأول من الاختبار عندما تريد قائمة انتظار الحدث لتتم معالجتها.

وApplication.application.callLater(addAsync(phaseTwo, 1000, [ <م> وسائط ... ]), [null]);

ومع وظيفة phaseTwo وجود توقيع التالية.

وprivate function phaseTwo(e:Event, args:Array):void

وسيتم تمريرها e كائن null. وهذا أمر ضروري لتكون متوافقة مع addAsync.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top