تكليفات الدروس من [ 1 ] إلى [ 10 ]
[ 8 ] تكليفات على [ Global Methods ]
التكليف 01
إعداد أمر تشغيل الاختبارات
- لديك الجزء التالي من ملف package.json
- قم بتعديل أمر test ليقوم بتشغيل Jest
- قم بكتابة الأمر المستخدم لتشغيل الاختبارات من ال Terminal
- اعتبر أن Jest مثبتة بالفعل داخل المشروع
{
"scripts": {
"test": ""
}
}
التكليف 02
كتابة أول Test
- قم بإنشاء ملف بإسم welcome.js
- قم بإنشاء Function بإسم welcome تقوم بإرجاع النص "Welcome To Testing"
- قم بتصدير الدالة باستخدام module.exports
- قم بإنشاء ملف بإسم welcome.test.js داخل مجلد tests
- قم بكتابة Test يتأكد من النص الذي تقوم بإرجاعه الدالة باستخدام toBe
- للتدريب على TDD ابدأ بدالة فارغة واكتب الاختبار وشاهد فشله ثم أكمل الدالة ليعمل بنجاح
// welcome.js
function welcome() {
// Write Your Code Here
}
module.exports = welcome;// tests/welcome.test.js
// Import The Function And Write Your Test Here
التكليف 03
اختبار أكثر من حالة
- قم بإنشاء Function بإسم getTotal تقبل سعر المنتج وعدد القطع
- لو لم يتم تمرير بيانات تقوم بإرجاع 0
- لو تم تمرير السعر فقط يكون عدد القطع الافتراضي 1
- لو تم تمرير السعر والعدد تقوم بإرجاع حاصل ضربهما
- لو عدد القطع 0 تقوم بإرجاع 0
- قم بكتابة اختبار مستقل لكل حالة
- استخدم it بدلا من test في أحد الاختبارات
// get-total.js
// Write Function Code Here
// Expected Results
// getTotal() => 0
// getTotal(50) => 50
// getTotal(50, 3) => 150
// getTotal(50, 0) => 0
التكليف 04
اختبار عدد غير محدد من القيم
- قم بإنشاء Function بإسم joinWords تستقبل أي عدد من الكلمات
- الدالة تقوم بإرجاع الكلمات وبين كل كلمة والتالية مسافة واحدة
- لو لم يتم تمرير كلمات تقوم بإرجاع نصا فارغا
- قم بكتابة اختبار مستقل لكل حالة من الحالات التالية
// join-words.js
// Write Function Code Here
// Expected Results
// joinWords() => ""
// joinWords("Hello") => "Hello"
// joinWords("Hello", "Jest") => "Hello Jest"
// joinWords("I", "Love", "Unit", "Testing") => "I Love Unit Testing"
التكليف 05
تنظيم الاختبارات باستخدام Describe
- لديك الدالة التالية التي تقبل رقما وتقوم بإرجاع نوعه
- ممنوع تعديل الدالة
- قم بإنشاء مجموعة اختبارات رئيسية بإسم "Check Number Type"
- داخلها مجموعة بإسم "Positive And Negative Numbers" لاختبار الرقم الموجب والسالب
- داخلها مجموعة أخرى بإسم "Zero And Default Value" لاختبار الصفر وعدم تمرير قيمة
- استخدم toBe في جميع الاختبارات
// number-type.js
function numberType(number = 0) {
if (number > 0) {
return "Positive";
}
if (number < 0) {
return "Negative";
}
return "Zero";
}
module.exports = numberType;
التكليف 06
كتابة الدالة من الاختبارات وتوثيقها
- لديك الاختبارات التالية وممنوع تعديلها
- قم بإنشاء Function بإسم formatUsername تجعل جميع الاختبارات تنجح
- لو لم يتم تمرير إسم تقوم بإرجاع "Unknown"
- لو تم تمرير إسم احذف المسافات من بدايته ونهايته
- احذف علامة @ من البداية لو موجودة والمطلوب حذف علامة واحدة فقط
- بعد التنظيف احتفظ بأول 8 أحرف فقط
- قم بكتابة تعليق أعلى الدالة يشرح سلوكها بالإنجليزي وكل نقطة في سطر منفصل
- راعي ترتيب الخطوات حتى ينجح الاختبار الأخير
// tests/format-username.test.js
const formatUsername = require("../format-username");
describe("Format The Username", () => {
test("Return Unknown If No Username Is Passed", () => {
expect(formatUsername()).toBe("Unknown");
});
test("Remove Spaces From Both Ends", () => {
expect(formatUsername(" Osama ")).toBe("Osama");
});
test("Remove The Leading At Sign", () => {
expect(formatUsername("@Ahmed")).toBe("Ahmed");
});
test("Keep Only The First Eight Characters", () => {
expect(formatUsername("JavaScript")).toBe("JavaScri");
});
test("Keep A Valid Username Unchanged", () => {
expect(formatUsername("Sayed")).toBe("Sayed");
});
test("Clean The Username Before Limiting Its Length", () => {
expect(formatUsername(" @JavaScript ")).toBe("JavaScri");
});
});
التكليف 07
استخدام Only و Skip
- لديك الدالة وملف الاختبارات التاليان
- ممنوع تعديل الدالة أو محتوى الاختبارات
- في المرحلة الأولى قم بتشغيل اختبار الرقم الموجب فقط باستخدام only
- في المرحلة الثانية قم بتشغيل جميع الاختبارات ما عدا اختبار الرقم السالب باستخدام skip
- كل مرحلة مستقلة عن الأخرى
double.js
function double(number = 0) {
return number * 2;
}
module.exports = double;tests/double.test.js
const double = require("../double");
test("Double A Positive Number", () => {
expect(double(5)).toBe(10);
});
test("Double A Negative Number", () => {
expect(double(-5)).toBe(-10);
});
test("Return Zero If No Number Is Passed", () => {
expect(double()).toBe(0);
});
التكليف 08
التجهيز والتنظيف باستخدام Hooks
- لديك متغير numbers يبدأ ب Array فارغة
- استخدم beforeAll لوضع القيم [10, 20, 30] قبل تشغيل الاختبارات
- اكتب اختبارا يتأكد أن عدد العناصر 3
- اكتب اختبارا يتأكد أن مجموع الأرقام 60
- استخدم afterAll لإفراغ ال Array بعد انتهاء جميع الاختبارات
- ضع ال Hooks والاختبارات داخل describe
- ممنوع الاعتماد على اختبار لتجهيز بيانات الاختبار التالي
// tests/numbers.test.js
let numbers = [];
// Write Your Code Here