سؤال

وأنا أحاول أن استخدام callLater مع v0.9 لFlexUnit:

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: <لأ href = "http://blogs.digitalprimates.net/codeSlinger/index.cfm/2009/5/3/FlexUnit-4-in-360-seconds "يختلط =" noreferrer نوفولو "> 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

نصائح أخرى

ويبدو أنك تتوقع حدث، ولكن ليس الحصول على واحد. وأتصور التعليمة البرمجية التالية العمل.

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);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top