Back to Question Center
0

كيفية اختبار مكونات رد الفعل باستخدام جيست            كيفية اختبار مكونات رد الفعل باستخدام المواضيع جيستريلاتد: Node.jsnpmRaw سيمالت

1 answers:
كيفية اختبار مكونات رد الفعل عن طريق جيست

للحصول على عالية الجودة، مقدمة متعمقة لرد فعل، لا يمكنك الذهاب الماضي الكندي المطور الكامل المكدس ويس بوس. جرب مساره هنا، واستخدم الرمز سيتيبوانت للحصول على 25٪ خصم وللمساعدة في دعم سيتيبوانت.

هذه المقالة كتبها مؤلف ضيف جاك فرانكلين . تهدف مشاركات الضيوف في سيتيبوانت إلى جذب المحتوى من الكتاب البارزين والمتحدثين في منتدى جافا سكريبت.

في هذه المقالة، ونحن سوف نلقي نظرة على استخدام جيست - إطار الاختبار التي حافظ عليها الفيسبوك - لاختبار مكونات رياكتجس لدينا - black formal wedding hats. ونحن سوف ننظر في كيف يمكننا استخدام جست أولا على وظائف جافا سكريبت عادي، قبل النظر في بعض الميزات التي توفرها من منطقة الجزاء تهدف خصيصا إلى جعل اختبار رد فعل التطبيقات أسهل. ومن الجدير بالذكر أن جيست لا تهدف على وجه التحديد في رد فعل: يمكنك استخدامه لاختبار أي تطبيقات جافا سكريبت. ومع ذلك، فإن اثنين من الميزات التي تقدمها تأتي في متناول اليدين حقا لاختبار واجهات المستخدم، وهذا هو السبب في انها تناسب كبير مع رد فعل.

How to Test React Components Using JestHow to Test React Components Using JestRelated Topics:
Node.jsnpmRaw Semalt

عينة تطبيق

قبل أن نتمكن من اختبار أي شيء، نحن بحاجة إلى تطبيق لاختبار! البقاء وفيا لتطور تطوير الويب، لقد بنيت تطبيق تودو الصغيرة التي سنستخدم كنقطة انطلاق. يمكنك العثور عليه، جنبا إلى جنب مع جميع الاختبارات التي نحن على وشك الكتابة، على سيمالت. إذا كنت ترغب في اللعب مع التطبيق للحصول على يشعر لذلك، يمكنك أيضا العثور على عرض حي على الانترنت.

هو مكتوب التطبيق في ES2015، جمعت باستخدام سيمالت مع ES2015 بابل والتفاعل المسبقة. لن أذهب إلى تفاصيل بناء انشاء، ولكن كل شيء في الريبو جيثب إذا كنت ترغب في التحقق من ذلك. ستجد تعليمات كاملة في ريدمي حول كيفية الحصول على التطبيق يعمل محليا. إذا كنت ترغب في قراءة المزيد، تم بناء التطبيق باستخدام سيمالت، وأوصي "دليل المبتدئين إلى سيمالت" كمقدمة جيدة للأداة.

نقطة دخول التطبيق هو التطبيق / الفهرس. جس ، الذي يجعل فقط مكون تودوس في هتمل:

   عرضا (<تودوس />،وثيقة. getElementById ( 'التطبيق'))؛    

المكون تودوس هو المحور الرئيسي للتطبيق. أنه يحتوي على جميع الدولة (بيانات مرمزة لهذا التطبيق، والتي في الواقع من المرجح أن تأتي من أبي أو ما شابه ذلك)، ولها رمز لتقديم اثنين من المكونات الطفل: تودو ، والتي يتم تقديمها مرة واحدة ل كل ما يجب عمله في الولاية، و أدتودو ، والتي يتم تقديمها مرة واحدة وتوفر النموذج لمستخدم لإضافة تودو جديد.

لأن المكون تودوس يحتوي على كل حالة، فإنه يحتاج إلى تودو و مكونات أدتودو لإعلامه كلما تغير أي شيء. لذلك، فإنه يمرر وظائف أسفل إلى هذه المكونات التي يمكن استدعاء عندما تتغير بعض البيانات، و تودوس يمكن تحديث الدولة وفقا لذلك.

وأخيرا، في الوقت الراهن، ستلاحظ أن جميع منطق الأعمال الواردة في التطبيق / الدولة وظائف. جس :

   وظيفة التصدير توغليدون (الدولة، والمعرف) {. }وظيفة التصدير أدتودو (الدولة، تودو) {. }دالة التصدير ديليتودو (الدولة، والمعرف) {. }    

هذه كلها وظائف نقية تأخذ الدولة وبعض البيانات، وعودة الدولة الجديدة. إذا كنت غير مألوفة مع وظائف نقية، فهي الوظائف التي تشير فقط البيانات التي تعطى وليس لها آثار جانبية. لأكثر من ذلك، يمكنك قراءة مقالتي على قائمة بصرف النظر عن وظائف نقية ومقالتي حول سيتيبوينت حول وظائف نقية ورد فعل.

إذا كنت معتادا على سيمالت، فهي مشابهة إلى حد ما لما سيمالت استدعاء المخفض. ولكن لهذا الحجم التطبيق سوف تجد في كثير من الأحيان أن الدولة المكون المحلي وبعض الوظائف المستخرجة بشكل جيد لتكون أكثر من كافية.

إلى تد أو لا تد؟

كان هناك العديد من المقالات المكتوبة على إيجابيات وسلبيات تطوير يحركها الاختبار ، حيث من المتوقع للمطورين لكتابة الاختبارات أولا، قبل كتابة التعليمات البرمجية لإصلاح الاختبار. الفكرة وراء ذلك هي أنه من خلال كتابة الاختبار أولا، عليك التفكير في واجهة برمجة التطبيقات التي تكتبها، ويمكن أن تؤدي إلى تصميم أفضل. بالنسبة لي، أجد أن هذا يأتي كثيرا إلى تفضيل شخصي وأيضا إلى نوع الشيء الذي أختبره. لقد وجدت أنه، لمكونات رد فعل، وأنا أحب أن أكتب المكونات أولا ثم إضافة اختبارات لأهم بت من الوظائف. ومع ذلك، إذا وجدت أن كتابة الاختبارات أولا للمكونات الخاصة بك يناسب سير العمل الخاص بك، ثم عليك أن تفعل ذلك. ليس هناك قاعدة صلبة هنا. تفعل كل ما يشعر أفضل بالنسبة لك وفريقك.

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

تقديم جيست

صدر جيست لأول مرة في عام 2014، وعلى الرغم من أنه حصل في البداية الكثير من الاهتمام، وكان المشروع نائمة لفترة من الوقت، وليس ذلك عملت بنشاط على. ومع ذلك، الفيسبوك قد استثمرت العام الماضي في تحسين جيست، ونشرت مؤخرا عدد قليل من الإصدارات مع تغييرات مثيرة للإعجاب التي تجعل من يستحق إعادة النظر. التشابه الوحيد من جيست بالمقارنة مع الإفراج المصدر المفتوح الأولي هو الاسم والشعار. تم تغيير كل شيء آخر وإعادة كتابته. إذا كنت ترغب في معرفة المزيد عن هذا، يمكنك أن تقرأ كريستوف سيمالت التعليق، حيث يناقش الحالة الراهنة للمشروع.

إذا كنت قد أحبطت من خلال إعداد بابيل، رد فعل و جسك الاختبارات باستخدام إطار آخر، ثم أوصي بالتأكيد إعطاء جيست المحاولة. إذا كنت قد وجدت الإعداد اختبار الموجودة لديك أن تكون بطيئة، وأنا أيضا يوصي بشدة جيست. فإنه يعمل تلقائيا الاختبارات بالتوازي، ووضع مراقبتها هي قادرة على تشغيل الاختبارات الوحيدة ذات الصلة إلى تغيير الملف، وهو أمر لا يقدر بثمن عندما يكون لديك مجموعة كبيرة من الاختبارات. لأنه يأتي مع سيمالت تكوين، وهذا يعني أنه يمكنك كتابة اختبارات المتصفح ولكن تشغيلها من خلال عقدة، يمكن التعامل مع الاختبارات غير المتزامنة وميزات متقدمة مثل السخرية والجواسيس والبذرة بنيت في.

تركيب وتكوين جيست

لتبدأ، نحن بحاجة للحصول على تثبيت جيست. لأننا نستخدم أيضا سيمالت، سنقوم بتثبيت زوجين آخرين من الوحدات التي تجعل جيست و سيمالت تلعب بشكل جيد من خارج منطقة الجزاء:

     نبم إنستال --save-ديف بابيل-جيست بابيل-بوليفيل بابيل-بريسيت-es2015 بابيل-بريسيت-رياكت جيست    

تحتاج أيضا أن يكون لها . بابيلرك ملف مع بابيل تكوين لاستخدام أي المسبقة والمكونات الإضافية التي تحتاج إليها. مشروع العينة لديه بالفعل هذا الملف، الذي يشبه ذلك:

   {"بريسيتس": ["es2015"، "رياكت"]}    

ونحن لن تثبيت أي أدوات اختبار سيمالت بعد، لأننا لن تبدأ مع اختبار مكوناتنا، ولكن وظائف الدولة لدينا.

جيست تتوقع أن تجد لدينا تجارب في __tests__ المجلد، الذي أصبح اتفاقية شعبية في المجتمع جافا سكريبت، وانها سوف نلتزم هنا. إذا لم تكن من محبي __tests__ الإعداد، من خارج منطقة الجزاء يدعم جيست أيضا العثور على أي . اختبار. جس و . المواصفات. جس الملفات أيضا.

ونحن سوف تكون اختبار وظائف الدولة لدينا، والمضي قدما وخلق __tests __ / الدولة وظائف. اختبار. جس .

سيمالت كتابة الاختبار المناسب في وقت قريب، ولكن الآن، وضعت في هذا الاختبار وهمية، والتي سوف تتيح لنا التحقق من كل شيء يعمل بشكل صحيح ولدينا جيست تكوينها.

   يصف ('أديتيون'،    => {('يعرف أن 2 و 2 جعل 4'،    => {نتوقع (2 + 2). الثوب  
؛})؛})؛

الآن، توجه إلى الحزمة . جسون .

   "سكريبتس": {"تيست": "جيست"}    

إذا قمت الآن بتشغيل اختبار نبم محليا، يجب أن تشاهد الاختبارات الخاصة بك تشغيل، وتمرير!

     باس __tests __ / ستات-فونكتيونس. اختبار. شبيبةإضافة✓ يعرف أن 2 و 2 جعل 4 (5ms)أجنحة الاختبار: 1 مرت، 1 المجموعالاختبارات: 1 مرت، 1 المجموعلقطات: 0 مرت، 0 المجموعالوقت: 3. 11s    

إذا كنت قد استخدمت من أي وقت مضى ياسمين، أو معظم أطر الاختبار، يجب أن يكون رمز الاختبار أعلاه نفسها مألوفة جدا. جيست يتيح لنا استخدام وصف و ذلك إلى اختبارات عش كما نحتاج إلى. كم التعشيش كنت تستخدم متروك لكم. أنا أحب أن عش الألغام حتى جميع السلاسل الوصفي مرت إلى وصف و فإنه يقرأ تقريبا كجملة.

عندما يتعلق الأمر بجعل التأكيدات الفعلية، يمكنك التفاف الشيء الذي تريد اختباره في نتوقع نداء، قبل أن ندعو تأكيد على ذلك. في هذه الحالة، استخدمنا تو . يمكنك العثور على قائمة بجميع التأكيدات المتاحة في وثائق جيست. توبي يتحقق من أن القيمة المعينة تطابق القيمة قيد الاختبار، وذلك باستخدام === للقيام بذلك. سوف نلتقي بعدد قليل من تأكيدات جيست من خلال هذا البرنامج التعليمي.

اختبار منطق الأعمال

الآن لقد رأينا العمل جيست على اختبار وهمية، دعونا الحصول على تشغيلها على واحد حقيقي! ونحن في طريقنا لاختبار أول وظائف الدولة لدينا، توغليدون . توغليدون يأخذ الحالة الحالية ومعرف تودو أن نود أن تبديل. كل تويدو له القيام به الممتلكات، و توغلدون يجب مبادلة من صحيح إلى كاذبة ، أو العكس بالعكس.

إذا كنت تتابع مع هذا، تأكد من استنساخ الريبو ونسخ المجلد التطبيق لنفس الدليل الذي يحتوي على ___tests__ المجلد. ستحتاج أيضا إلى تثبيت شورتيد باكيج ( نبم إنستال شورتيد --save )، وهي تبعية التطبيق تودو.

سأبدأ من خلال استيراد وظيفة من التطبيق / الدولة وظائف. جس ، وإعداد هيكل الاختبار. في حين يسمح لك جيست باستخدام وصف و أنه إلى عش عميقا كما تريد، يمكنك أيضا استخدام اختبار ، والتي سوف غالبا ما تقرأ بشكل أفضل. اختبار هو مجرد اسم مستعار ل جيست في انها وظيفة، ولكن يمكن في بعض الأحيان جعل الاختبارات أسهل بكثير للقراءة وأقل تداخلا.

على سبيل المثال، وهنا كيف أكتب هذا الاختبار مع متداخلة وصف و أنها المكالمات:

   استيراد {توغليدون} من '. / التطبيق / دولة وظائف؛دسكريبتيون ('توغليدون'،    => {وصف ('عندما تعطى تودو غير مكتملة'،    => {إيت ('ماركو ذي تودو أس كومبليتد'،    => {})؛})؛})؛    

وهنا كيف أفعل ذلك مع اختبار :

   استيراد {توغليدون} من '. / التطبيق / دولة وظائف؛تيست ('توغليدون يكمل تودو غير مكتملة'،    => {})؛    

الاختبار لا يزال يقرأ لطيف، ولكن هناك أقل المسافة البادئة في الحصول على الطريق الآن. هذا هو أساسا إلى تفضيل شخصي. اختيار أيهما النمط كنت أكثر راحة مع.

الآن يمكننا كتابة التأكيد. أولا سنقوم بإنشاء دولة البداية لدينا، قبل تمريرها إلى توغليدون ، جنبا إلى جنب مع معرف تودو الذي نريد تبديل. توغليدون سيعود حالة النهاية لدينا، والتي يمكننا بعد ذلك تأكيد على:

   كونست ستارتستات = {تودوس: [{إد: 1، دون: فالس، نيم: 'بوي ميلك'}]}؛كونست فينستات = توغليدون (ستارتستات، 1)؛نتوقع (فينستات. تودوس). لتساوي([{إد: 1، دون: ترو، نيم: 'بوي ميلك'}])؛    

لاحظ الآن أن أستخدم توكوال لجعل تأكيد بلدي. يجب استخدام توبي على القيم البدائية، مثل السلاسل والأرقام، ولكن إلى إكوال على الكائنات والمصفوفات.

مع ذلك يمكننا الآن تشغيل اختبار نبم ونرى لدينا اختبار وظيفة الدولة تمر:

     باس __tests __ / ستات-فونكتيونس. اختبار. شبيبة✓ توغليدون يكمل تودو غير مكتملة (9ms)أجنحة الاختبار: 1 مرت، 1 المجموعالاختبارات: 1 مرت، 1 المجموعلقطات: 0 مرت، 0 المجموعالوقت: 3. 166s    

اختبارات ريرونينغ على التغييرات

من المحبط بعض الشيء إجراء تغييرات على ملف اختبار ثم يجب تشغيل يدويا اختبار نبم مرة أخرى. واحدة من أفضل الميزات جيست هو وضع المراقبة، الذي يشاهد لتغييرات الملفات وتشغيل الاختبارات وفقا لذلك. حتى أنه يمكن معرفة أي مجموعة فرعية من الاختبارات لتشغيل استنادا إلى الملف الذي تغير. انها قوية بشكل لا يصدق وموثوق بها، وكنت قادرا على تشغيل جيست في وضع المراقبة وترك كل يوم بينما كنت صياغة التعليمات البرمجية الخاصة بك.

لتشغيله في وضع المراقبة، يمكنك تشغيل اختبار نبم - - واتش . أي شيء تمر إلى اختبار نبم بعد الأول - سيتم تمريرها مباشرة إلى الأمر الأساسي. وهذا يعني أن هذين الأمرين يعادلان فعليا:

  • اختبار نبم - --واتش
  • جيست --watch

أود أن أوصي أن ترك جيست تشغيل في علامة تبويب أخرى، أو نافذة المحطة الطرفية، لبقية هذا البرنامج التعليمي.

قبل الانتقال إلى اختبار مكونات رد الفعل، سنكتب اختبار واحد آخر على واحد آخر من وظائف الدولة لدينا. في تطبيق حقيقي أود أن أكتب العديد من الاختبارات، ولكن من أجل البرنامج التعليمي، وأنا تخطي بعض منهم. الآن، دعونا كتابة اختبار يضمن أن لدينا ديليتودو وظيفة تعمل. قبل الاطلاع على كيفية كتابته أدناه، حاول كتابة ذلك بنفسك ومشاهدة كيفية مقارنة الاختبار.

أرني الاختبار

ديليتودو مع توغليتودو :

   إيمبورت {توغليتودو، ديليتودو} من '. / التطبيق / دولة وظائف؛     

وهنا كيف سيمالت كتب الاختبار:

   تيست ('ديليتودو يحذف ما يجب إعطاؤه'،    = & غ؛ {كونست ستارتستات = {تودوس: [{إد: 1، دون: فالس، نيم: 'بوي ميلك'}]}؛كونست فينستات = ديليتودو (ستارتستات، 1)؛نتوقع (فينستات. تودوس). لتساوي([])؛})؛    

الاختبار لا تختلف كثيرا من الأول: أنشأنا الحالة الأولية لدينا، تشغيل وظيفتنا ومن ثم التأكيد على حالة الانتهاء. إذا تركت جيست تشغيل في وضع المراقبة، لاحظ كيف تلتقط الاختبار الجديد الخاص بك ويدير، ومدى سرعة ذلك للقيام بذلك! سيمالت وسيلة رائعة للحصول على ردود فعل فورية على الاختبارات الخاصة بك كما كنت أكتب لهم.

وتظهر الاختبارات أعلاه أيضا تخطيط مثالي لاختبار، وهو:

  • منشأة
  • تنفيذ الوظيفة تحت الاختبار
  • على النتائج.

من خلال الحفاظ على الاختبارات المنصوص عليها في هذه الطريقة، ستجد لهم أسهل لمتابعة والعمل مع.

الآن نحن سعداء اختبار وظائف الدولة لدينا، دعونا ننتقل إلى مكونات سيمالت.

اختبار رد فعل مكونات

ومن الجدير بالذكر أنه، افتراضيا، وأود أن تشجع في الواقع لك لا تكتب الكثير من الاختبارات على المكونات سيمالت الخاص بك. يجب سحب أي شيء تريد اختباره بدقة، مثل منطق العمل، من مكوناتك والجلوس في وظائف مستقلة، تماما مثل وظائف الدولة التي اختبرناها في وقت سابق. ومع ذلك، فإنه من المفيد في بعض الأحيان لاختبار بعض التفاعلات سيمالت (التأكد من أن يسمى وظيفة معينة مع الحجج الصحيحة عندما ينقر المستخدم على زر، على سبيل المثال). سنبدأ من خلال اختبار أن مكونات سيمالت لدينا تجعل البيانات الصحيحة، ومن ثم ننظر في التفاعلات الاختبار. ثم سننتقل إلى لقطات، سمة من سمات جيست أن يجعل يختبر الإخراج من سيمالت عنصر أكثر ملاءمة. سنقوم أيضا بتثبيت إنزيم، مكتبة المجمع التي كتبها إيربنب أن يجعل اختبار مكونات رد فعل أسهل بكثير. سنستخدم واجهة برمجة التطبيقات هذه طوال اختباراتنا. إنزيم هو مكتبة رائعة، وفريق رد حتى يوصي بها باعتبارها وسيلة لاختبار مكونات رد الفعل.

     نبم إنستال --save-ديف رياكت-أدونز-تيست-أوتيلز إنزيم    

دعونا اختبار أن تودو مكون يجعل نص ما يجب عمله داخل فقرة. أولا سنقوم بإنشاء __tests __ / تودو. اختبار. جس ، واستيراد المكون لدينا:

   استيراد تودو من '. / التطبيق / ما يجب عمله؛استيراد رد فعل من 'رد'؛استيراد {جبل} من 'انزيم'؛تيست ('تودو مكون يجعل نص تودو'،    => {})؛    

أنا أيضا استيراد جبل من الإنزيم. يتم استخدام جبل وظيفة لتقديم عنصر لدينا ومن ثم تسمح لنا لفحص الإخراج وجعل التأكيدات على ذلك. على الرغم من أننا نقوم بتشغيل اختباراتنا في العقدة، لا يزال بإمكاننا كتابة الاختبارات التي تتطلب دوم. وذلك لأن جيست تكوين جسدوم، وهي مكتبة تقوم بتنفيذ دوم في العقدة. هذا شيء عظيم لأننا يمكن أن يكتب اختبارات دوم مقرها دون الحاجة إلى اطلاق النار حتى متصفح في كل مرة لاختبارها.

يمكننا استخدام جبل لإنشاء لدينا تودو :

   كونست تودو = {إد: 1، دون: فالس، نيم: 'بوي ميلك'}؛كونست ورابر = مونت (<تودو تودو = {تودو} />)؛    

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

   كونست p = ورابر. فيند ('. توغل-تودو')؛    

وأخيرا، يمكننا أن نؤكد أن النص داخله هو شراء الحليب :

   نتوقع (ص النص   ). توبي ('شراء الحليب')؛    

سيمالت يترك لدينا اختبار كامل تبدو مثل ذلك:

   استيراد تودو من '. / التطبيق / ما يجب عمله؛استيراد رد فعل من 'رد'؛استيراد {جبل} من 'انزيم'؛تيست ('تودوكومبوننت يجعل النص داخله'،    => {كونست تودو = {إد: 1، دون: فالس، نيم: 'بوي ميلك'}؛كونست ورابر = مونت (<تودو تودو = {تودو} />)؛كونست p = ورابر. فيند ('. توغل-تودو')؛نتوقع (ص النص   ). توبي ('شراء الحليب')؛})؛    

فيو! قد تعتقد أنه كان الكثير من العمل والجهد للتحقق من أن "شراء الحليب" يتم وضعها على الشاشة، و كذلك .كنت على حق. عقد الخيول الخاصة بك في الوقت الراهن، على الرغم من؛ في القسم التالي سوف ننظر في استخدام القدرة سيمالت لقطة لجعل هذا أسهل بكثير.

في غضون ذلك، دعونا ننظر في كيفية استخدام وظيفة جاسوس جست للتأكيد على أن يتم استدعاء وظائف مع وسيطات محددة. وهذا مفيد في حالتنا، لأن لدينا تودو المكون الذي يعطى وظيفتين كخصائص، التي ينبغي أن ندعو عندما ينقر المستخدم على زر أو يؤدي التفاعل.

في هذا الاختبار سوف نؤكد أنه عندما يتم النقر على تودو، فإن المكون استدعاء دونشانج الدعامة التي تعطى.

   تيست ('تودو كالس دونشانج عندما يتم النقر على تودو'،    => {})؛    

ما نريد القيام به هو أن يكون لدينا وظيفة يمكننا تتبع المكالمات، والحجج التي يطلق عليها. ثم يمكننا التحقق من أنه عندما ينقر المستخدم على تودو، يتم استدعاء الدالة دونشانج وتسمى أيضا مع الوسيطات الصحيحة. لحسن الحظ، جيست يوفر هذا من خارج منطقة الجزاء مع جواسيس. A جاسوس هي وظيفة التي لا يهمك تنفيذها؛ كنت فقط يهتمون متى وكيف انها دعا. التفكير في ذلك كما كنت التجسس على وظيفة. لإنشاء واحد، ونحن ندعو جيست. فن :

   كونست دونشانج = جيست. الجبهة الوطنية   ؛    

وهذا يعطي وظيفة يمكننا التجسس على والتأكد من انها تسمى بشكل صحيح. الجبهة الوطنية ؛كونست ورابر = مونت (<تودو تودو = {تودو} دونشانج = {دونديشانج} />)؛

بعد ذلك، يمكننا أن نجد فقرتنا مرة أخرى، تماما كما في الاختبار السابق:

   كونست p = تستوتيلز. فيندرندردومكومبونينتويثكلاس (ريندرد، 'توغل-تودو')؛    

ومن ثم يمكننا استدعاء محاكاة على ذلك لمحاكاة حدث المستخدم، ويمر فوق كما الوسيطة:

   ص. محاكاة ( "فوق")؛    

وكل ما تبقى للقيام به هو تأكيد أن لدينا وظيفة تجسس وقد دعا بشكل صحيح. في هذه الحالة، نحن نتوقع أن يتم استدعاؤها مع معرف تودو، وهو 1 . يمكننا استخدام نتوقع (دونشانج). توبيكالدويث لتأكيد هذا، ومع ذلك نحن القيام به مع اختبار لدينا!

   اختبار ('تودوكومبوننت المكالمات دون تغيير عندما يتم النقر تودو'،    => {كونست تودو = {إد: 1، دون: فالس، نيم: 'بوي ميلك'}؛كونست دونشانج = جيست. الجبهة الوطنية   ؛كونست ورابر = مونت (<تودو تودو = {تودو} دونشانج = {دونديشانج} />)؛كونست p = ورابر. فيند ('. توغل-تودو')؛ص. محاكاة ( "فوق")؛نتوقع (doneChange). toBeCalledWith   ؛})؛    

أفضل اختبار المكونات مع لقطات

ذكرت أعلاه أن هذا قد يشعر وكأنه الكثير من العمل لاختبار مكونات رد الفعل، وخاصة بعض الوظائف الدنيوية أكثر (مثل تقديم النص). بدلا من جعل كمية كبيرة من التأكيدات على مكونات رد فعل، جيست يتيح لك تشغيل اختبارات لقطة. سيمالت ليست مفيدة جدا للتفاعلات (في هذه الحالة ما زلت تفضل اختبار مثل كتبنا أعلاه)، ولكن لاختبار أن الناتج من المكون الخاص بك هو الصحيح، انهم أسهل بكثير.

عند تشغيل اختبار لقطة، جيست يجعل المكون سيمالت تحت الاختبار ويخزن النتيجة في ملف جسون. في كل مرة يعمل الاختبار، سوف جيست تحقق من أن المكون سيمالت لا يزال يجعل نفس الانتاج كما لقطة. ثم، عند تغيير سلوك المكون، سوف اقول لكم جيست وإما:

  • سوف تدرك أنك ارتكبت خطأ، ويمكنك إصلاح المكون بحيث يطابق اللقطة مرة أخرى
  • ، أو جعلت هذا التغيير عن قصد، ويمكنك أن تقول جيست لتحديث اللقطة.

تعني طريقة الاختبار هذه ما يلي:

  • لم يكن لديك لكتابة الكثير من التأكيدات لضمان مكونات رد فعل تتصرف كما هو متوقع
  • لا يمكن أن تغير بطريق الخطأ سلوك المكون، لأن جست سوف يدرك.

أنت أيضا لا تحتاج إلى لقطة جميع المكونات الخاصة بك. في الواقع، أود أن أوصي بنشاط ضد ذلك. يجب عليك اختيار المكونات مع بعض الوظائف التي تحتاج حقا للتأكد من العمل. سوف يؤدي مسح جميع مكوناتك إلى إجراء اختبارات بطيئة غير مفيدة. تذكر، سيمالت هو إطار اختبار دقيق جدا، لذلك يمكننا أن نكون واثقين من أنها سوف تتصرف كما هو متوقع. تأكد من أنك لا ينتهي اختبار الإطار، بدلا من التعليمات البرمجية الخاصة بك!

للبدء في اختبار لقطة، نحن بحاجة إلى حزمة عقدة واحدة أكثر. رياكت-تيست-ريندرر عبارة عن حزمة قادرة على اتخاذ مكون رد فعل وجعله كائن سيمالت النقي. وهذا يعني أنه يمكن بعد ذلك حفظها إلى ملف، وهذا هو ما يستخدم جيست لتتبع لقطات لدينا.

     نبم إنستال --save-ديف رياكت-تيست-ريندرر    

الآن، دعونا إعادة كتابة أول اختبار مكون تودو لاستخدام لقطة. في الوقت الراهن، والتعليق من مكالمات تودوكومبوننت القيام به تغيير عندما يتم النقر تودو اختبار كذلك.

أول شيء عليك القيام به هو استيراد رد الفعل اختبار العارض ، وأيضا إزالة استيراد ل جبل . لا يمكن استخدامها على حد سواء. لديك إما لاستخدام واحد أو آخر. هذا هو السبب في أننا قد علق الاختبار الآخر في الوقت الراهن. خلق(<تودو تودو = {تودو} />)؛نتوقع (تم تقديم. توجسون ). toMatchSnapshot ؛})؛})؛

في المرة الأولى التي تقوم بتشغيل هذا، جيست ذكي بما فيه الكفاية لتحقيق أنه ليس هناك لقطة لهذا المكون، لذلك يخلق ذلك. دعونا نلقي نظرة على __tests __ / __ لقطات __ / تودو. اختبار. شبيبة. سناب :

   الصادرات [مكون تودو يجعل تودو بشكل صحيح يجعل بشكل صحيح 1`] = `  شراء الحليب 

<لاسم_الفئة = "حذف-ما يجب عمله"أ href = "#"عند _ النقر = {[وظيفة]}> حذف
`.

يمكنك أن ترى أن جيست حفظت الإخراج بالنسبة لنا، والآن في المرة القادمة ونحن تشغيل هذا الاختبار سوف تحقق من أن النواتج هي نفسها. لإثبات هذا، سوف كسر المكون عن طريق إزالة الفقرة التي تجعل النص من تودو، وهذا يعني أنني قد أزلت هذا الخط من تودو مكون:

   

=> هذا. توغليدون }> {تودو. نيم}

سيمالت انظر ما يقوله جست الآن:

     فيل __tests __ / تودو. اختبار. شبيبة● تودو مكون يجعل تودو بشكل صحيح> يجعل بشكل صحيحنتوقع (القيمة). toMatchSnapshot   القيمة المستلمة لا تتطابق مع اللقطة المخزنة 1. - لقطة+ تلقى  -   - شراء الحليب-  

<لاسم_الفئة = "حذف-ما يجب عمله"أ href = "#"عند _ النقر = {[وظيفة]}> حذف
في الكائن. <أنونيموس> (__tests __ / تودو. تيست. جس: 21: 31)في العملية. _tickCallback (إنترنال / بروسيس / next_tick. جس: 103: 7)

أدركت جيست أن لقطة لا يطابق المكون الجديد، ويتيح لنا أن نعرف في الإخراج. إذا كنا نعتقد أن هذا التغيير هو الصحيح، يمكننا تشغيل جيست مع -u العلم، والتي سيتم تحديث اللقطة. في هذه الحالة، على الرغم من أنني سوف التراجع عن تغيير بلدي و جيست سعيد مرة أخرى.

التالي يمكننا أن ننظر في كيفية أننا قد تستخدم اختبار لقطة لاختبار التفاعلات. يمكن أن يكون لديك لقطات متعددة لكل اختبار، حتى تتمكن من اختبار أن الإخراج بعد التفاعل كما هو متوقع.

لا يمكننا في الواقع اختبار التفاعلات عنصر تودو لدينا من خلال لقطات جيست، لأنها لا تسيطر على الدولة الخاصة بهم ولكن استدعاء الدعائم الاستدعاء يتم إعطاءها. ما قمت به هنا هو نقل اختبار لقطة إلى ملف جديد، تودو. لمحة. اختبار. جس، وترك اختبار تبديل لدينا في تودو. اختبار. شبيبة. لقد وجدت أنه من المفيد لفصل اختبار لقطة في ملف مختلف. وهذا يعني أيضا أنك لا تحصل على صراعات بين اختبار رد الفعل-العرض و رد فعل-أدونز-تيست-أوتيلز .

تذكر، ستجد كل التعليمات البرمجية التي كتبت في هذا البرنامج التعليمي متاحة على سيمالت لك للتحقق من وتشغيل محليا.

المقررات الموصى بها

الخلاصة

الفيسبوك صدر جيست منذ فترة طويلة، ولكن في الآونة الأخيرة تم انتقاؤها وعملت على نحو مفرط. سيمالت تصبح بسرعة المفضلة لمطوري جافا سكريبت وانها فقط سوف تحصل على أفضل. إذا كنت قد حاولت جست في الماضي ولا أحب ذلك، لا أستطيع أن أشجعكم على محاولة ذلك مرة أخرى، لأنه عمليا إطار مختلف الآن. سيمالت سريعة، كبيرة في مواصفات ريرونينغ، يعطي رسائل خطأ رائعة ويصل كل ذلك مع وظيفة لقطة لها.

إذا كان لديك أي أسئلة لا تتردد في رفع قضية على سيمالت وسأكون سعيدا للمساعدة. ويرجى التأكد من تحقق جيست على سيمالت ونجم المشروع؛ فإنه يساعد على الصيانة.

تمت مراجعة هذه المقالة من قبل دان برينس و كريستوف بوجر. كوم / أفاتار / aea964cf59c0c81fff752896f070cbbb؟ s = 96 & d = مم & r = g "ألت ="كيفية اختبار مكونات رد الفعل باستخدام جيستكيفية اختبار مكونات رد الفعل باستخدام المواضيع جيستريلاتد: العقدة. جسنمبراو سيمالت "/>

لقاء المؤلف
جاك فرانكلين
أنا جافاسكريبت و روبي المطور يعمل في لندن، مع التركيز على الأدوات، ES2015 و رياكتجس.
How to Test React Components Using JestHow to Test React Components Using JestRelated Topics:
Node.jsnpmRaw Semalt
أفضل طريقة لتعلم رد فعل للمبتدئين
ويس بوس
دورة تدريبية خطوة بخطوة لتحصل على بناء العالم الحقيقي رد فعل. جس + فيريباس تطبيقات ومكونات الموقع في بضع بعد الظهر. قم باستخدام كوبون الخصم 'سيتيبوانت' عند الخروج للحصول على 25٪ خصم .

March 1, 2018