مقدمة
لقد تم استكشاف اختبار وحدة، واختبار التغطية لجافا سكريبت كما عمل في تطبيق SharePoint جديد ل SharePoint على الإنترنت في المكتب 365 جناح. مسارات البحوث الواضحة دفعتني إلى Qunit.js والحق بعد ذلك, إلى Blanket.js.
كنت اسمحوا لي أن إعداد اختبارات الوحدة، ومجموعة منهم في الوحدات النمطية. وحدة نمطية مجرد وسيلة بسيطة تنظيم الاختبارات ذات الصلة. (لست متأكداً وأنا استخدامه كما يقصد بها, ولكن أنها تعمل بالنسبة لي حتى الآن مع مجموعة صغيرة من الاختبارات التي قمت بتعريف حتى الآن).
Blanket.js يتكامل مع كنت، وأنها سوف تظهر لي خطوط جافا سكريبت الفعلية التي كانت – والأهم من ذلك--لم ينفذ فعلياً أثناء تشغيل الاختبارات. هذا "تغطية" – خطوط أعدم مشمولة بالاختبار في حين أن البعض الآخر لا.
بين إعداد حالات الاختبار الجيد وعرض التغطية, ونحن يمكن أن تقلل من خطر أن قانوننا قد مخفي العيوب. الأوقات الجيدة.
كنت
على افتراض لديك الخاص بك Visual Studio إعداد المشروع, ابدأ بتحميل حزمة جافا سكريبت من http://qunitjs.com. إضافة جافا سكريبت والمغلق المقابلة إلى الحل الخاص بك. وهذا يشبه الألغام:
الشكل 1
كما ترون, لقد تم استخدام 1.13.0 وفي الوقت كتبت هذا بلوق وظيفة. لا تنسى للتحميل وإضافة ملف CSS.
أن الخروج من هذا الطريق, والخطوة التالية هي لإنشاء نوع من نظام الاختبار ومرجع بت كنت. أنا اختبار مجموعة من الدالات في ملف نصي يسمى "QuizUtil.js" لذلك أنا خلقت صفحة HTML يسمى "QuizUtil_test.html" كما هو موضح:
الشكل 2
هنا هو رمز:
<!DOCTYPE html>
<html xmlns= "http://www.w3.org/1999/xhtml">
<رئيس>
<العنوان>اختبار كويزوتيل مع كنت</العنوان>
<وصلة rel= "أوراق الأنماط" href="../CSS/qunit-1.13.0.css" />
<البرنامج النصي نوع= "نص/جافا سكريبت" src="QuizUtil.js" تغطية البيانات></البرنامج النصي>
<البرنامج النصي نوع ="النص/جافا سكريبت" src ="كنت 1.13.0.js"></البرنامج النصي>
<البرنامج النصي نوع ="النص/جافا سكريبت" src ="blanket.min.js"></البرنامج النصي>
<البرنامج النصي>
الوحدة النمطية("جيتيدفروملوكوب");
اختبار(كويزوتيل جيتيدفروملوكوبفيلد "", الدالة () {
فأر جودفالوي = "1;#بول غالفين";
تساوي(جيتيدفروملوكوبفيلد(جودفالوي) + 1, 2), "معرف [" + جودفالوي + "] + 1 وينبغي أن تكون 2";
تساوي(جيتيدفروملوكوبفيلد(غير معرف), غير معرف, وسيطة الإدخال غير معرفة "يجب إرجاع نتيجة غير معروف.");
تساوي(جيتيدفروملوكوبفيلد(""), غير معرف, "وسيطة الإدخال فارغ يجب إرجاع قيمة غير معرفة.");
تساوي(جيتيدفروملوكوبفيلد("تي إتش كيو gobbledigood3;أدا دكفن;sdjfbvubvqrubqer0873407t534piutheqw سكفجا;vn"), غير معرف,"ينبغي دائماً العودة نتيجة قابلة لتحويل إلى عدد صحيح");
تساوي(جيتيدفروملوكوبفيلد("2;#شخص آخر"), "2", "التحقق [2;#شخص آخر].");
تساوي(جيتيدفروملوكوبفيلد("9834524;#قيمة طويلة"), "9834524", "اختبار قيمة كبيرة.");
نوتيكوال(جيتيدفروملوكوبفيلد("5;#أي شخص", 6), 6, "اختبار نوتيكوال (5 لا يساوي 6 لهذه العينة: [5;#أي شخص]");
});
الوحدة النمطية("هتمليسكابي");
اختبار(كويزوتيل هتمليسكابي "()", الدالة () {
تساوي(هتمليسكابي("<"), "&الملازم;", "الهروب من أقل من المشغل ('<')");
تساوي(هتمليسكابي("<div class = "someclass">بعض النص</div>"), "&الملازم;div class ="سوميكلاس">بعض النص&الملازم;/div>", "سلسلة اختبار أكثر تعقيداً.");
});
الوحدة النمطية("جيتداتيسكامل");
اختبار(كويزوتيل جيتداتيسكامل "()", الدالة () {
تساوي(جيتداتيسكامل(الجديد التاريخ("31/12/2013")), "2013-12-31T:00:00:00", "اختبار تاريخ جد المبرمج: [12/31/2013]");
تساوي(جيتداتيسكامل(الجديد التاريخ("01/05/2014")), "2014-01-05T:00:00:00", "اختبار تاريخ جد المبرمج: [01/05/2014]");
تساوي(جيتداتيسكامل(الجديد التاريخ("01/31/2014")), "2014-01-31T:00:00:00", "اختبار تاريخ جد المبرمج: [01/31/2014]");
تساوي(جيتوداياسكامل(), جيتداتيسكامل(الجديد التاريخ()), "جيتوداياسكامل() وينبغي أن تساوي جيتداتيسكامل(تاريخ جديد())");
تساوي(جيتداتيسكامل("هراء القيمة"), غير معرف, "في محاولة للحصول على تاريخ قيمة هراء.");
تساوي(جيتداتيسكامل(غير معرف), غير معرف, "في محاولة للحصول على موعد [غير معرف] تاريخ.");
});
الوحدة النمطية("جيتباراميتيربينامي");
اختبار(كويزوتيل جيتباراميتيربينامي " (من سلسلة الاستعلام)", الدالة () {
تساوي(جيتباراميتيربينامي(غير معرف), غير معرف, "في محاولة للحصول على المعلمة غير محددة ينبغي العودة غير معرف.");
تساوي(جيتباراميتيربينامي("غير موجود"), غير معرف, "في محاولة للحصول على قيمة المعلمة عندما نعلم المعلمة غير موجود.");
});
الوحدة النمطية("ملفات تعريف الارتباط");
اختبار("كويزوتيل وظائف مختلفة في ملف تعريف الارتباط.", الدالة () {
تساوي(setCookie("اختبار", "1", -1), جيتكوكيفالوي("اختبار"), "ينبغي العمل بالحصول على ملف تعريف ارتباط تعيين.");
تساوي(setCookie("أنيكوكي", "1", -1), صحيح, "الإعداد الطبخ صالحة ينبغي العودة' صحيح '.");
تساوي(setCookie("اسم ملف تعريف الارتباط مجنون !@#$%"%\^&*(()?/><.,", "1", -1), صحيح, "تحديد اسم ملف تعريف ارتباط سيئة ينبغي العودة' false '.");
تساوي(setCookie(غير معرف, "1", -1), غير معرف, "تمرير معرف كاسم ملف تعريف الارتباط.");
تساوي(جيتكوكيفالوي("غير موجود"), "", "لا يوجد ملف تعريف الارتباط اختبار.");
});
</البرنامج النصي>
</رئيس>
<الهيئة>
<div معرف= "كنت"></div>
<div معرف= "كنت لاعبا أساسيا"></div>
</الهيئة>
</html>
وهناك العديد من الأمور التي تحدث هنا:
- الرجوع إلى قانون بلدي (QuizUtil.js)
- الرجوع إلى Qunity.js
- تعريف بعض الوحدات النمطية (جيتيدفروملوكوب, ملفات تعريف الارتباط, وآخرون)
- وضع <div> هو له معرف "كنت".
ثم, أنا مجرد سحب هذه الصفحة، ويمكنك الحصول على شيء من هذا القبيل:
الشكل 3
إذا قمت بالبحث عبر الجزء العلوي, لديك عدد قليل من الخيارات, اثنان منها مثيرة للاهتمام:
- إخفاء اجتازوا اختبارات: واضحة جداً. يمكن أن تساعد عينيك فقط انظر مجالات المشاكل، وليس هناك الكثير من الفوضى.
- الوحدة النمطية: (قائمة منسدلة): وهذا سوف تصفية الاختبارات وصولاً إلى مجرد تلك المجموعات من الاختبارات التي تريد.
أما بالنسبة للاختبارات أنفسهم – عدد قليل من التعليقات:
- غنى عن القول أن كنت بحاجة لكتابة التعليمات البرمجية الخاصة بك مثل أن قابل للاختبار في المقام الأول. باستخدام الأداة يمكن أن تساعد في إنفاذ هذا الانضباط. وعلى سبيل المثال, كان لي وظيفة تسمى "جيتوداياسكامل()”. هذه ليست قابلة للاختبار جداً نظراً لأنه يأخذ لا وسيطة الإدخال، واختباره للمساواة, سوف نحتاج إلى استمرار تحديث التعليمات البرمجية الاختبار يعكس التاريخ الحالي. إعادة بناء فإنه عن طريق إضافة معلمة إدخال بيانات ثم تمرير التاريخ الحالي عندما أريد تاريخ اليوم في تنسيق CAML.
- إطار كنت الوثائق الخاصة الاختبارات ويبدو أنها قوية جداً. فإنه يمكن القيام بأشياء بسيطة مثل اختبار للمساواة وأيضا الدعم لاستدعاءات أسلوب أجاكس (استخدام "حقيقية" أو سخر كل مستهزئ المفضلة الخاصة بك).
- الذهاب من خلال هذه العملية أيضا قوات كنت أعتقد من خلال الحالات الحافة – ما يحدث مع "غير معرف" أو null يتم تمريرها إلى دالة. فإنه يجعل من القتلى بسيطة لاختبار هذه السيناريوهات خارجاً. الأشياء الجيدة.
التغطية مع Blanket.js
ويكمل Blanket.js كنت بتتبع الخطوط الفعلية من التعليمات البرمجية التي تنفذ أثناء تشغيل الاختبارات الخاصة بك. أنه يدمج الحق في كنت حتى رغم أنها تطبيق كاملة منفصلة, أنه يلعب لطيف--أنها حقاً تبدو وكأنها واحدة من التطبيق السلس.
وهذا هو blanket.js في العمل:
الشكل 4
الشكل 5
(لديك فعلا انقر فوق خانة الاختيار "تمكين التغطية" في الجزء العلوي [انظر الشكل 3] لتمكين هذا.)
الخطوط المميزة في الشكل 5 لم يتم تنفيذها قبل أي من بلدي التجارب, لذا تحتاج إلى وضع اختبار الذي تسبب لهم بإعدام إذا أريد تغطية كاملة.
الحصول على blanket.js العمل باتباع الخطوات التالية:
- تحميل البرنامج من http://blanketjs.org/.
- إضافته إلى المشروع الخاص بك
- تحديث الصفحة مفعل الاختبار الخاصة بك (QuizUtil_test.html في حالتي) كما يلي:
- الإشارة رمز
- تزيين الخاص بك <البرنامج النصي> إشارة من هذا القبيل:
<البرنامج النصي نوع= "نص/جافا سكريبت" src="QuizUtil.js" تغطية البيانات></البرنامج النصي>
Blanket.js تلتقط السمة "البيانات--الغطاء"، ولا عن السحر. هوكس في كنت, تحديث واجهة المستخدم لإضافة الخيار "تمكين التغطية" وويلا!
ملخص (ليرة تركية; الدكتور)
كنت استخدامها كتابة حالات الاختبار الخاصة بك.
- تحميل البرنامج
- إضافته إلى المشروع الخاص بك
- كتابة صفحة مفعل الاختبار
- إنشاء الاختبارات الخاصة بك
- إعادة بناء التعليمات البرمجية بعض التعليمات البرمجية الخاصة بك تكون قابلة للاختبار
- كن مبدعاً! أعتقد أن من الجنون, سيناريوهات مستحيلة واختبار لهم على أي حال.
استخدم blanket.js لضمان التغطية
- تأكد من أن كنت تعمل
- تحميل blanket.js وإضافته إلى المشروع الخاص بك
- إضافة إلى صفحة مفعل الاختبار الخاصة بك:
- إضافة مرجع إلى blanket.js
- إضافة سمة "بيانات--غطاء" إلى الخاص بك <البرنامج النصي> العلامة
- تشغيل الاختبارات كنت الخاصة بك.
ابدأ أنا لم أي من هذا من قبل، وكان بعض الأشياء البدائية تعمل في عدد قليل من الساعات.
اختبار سعيدة!
</نهاية>
الاشتراك في بلادي بلوق.
اتبعني على التغريد في http://www.twitter.com/pagalvin